Tôi có nhiệm vụ đáng yêu để xử lý các tệp lớn đang được tải vào trình chỉnh sửa tập lệnh của ứng dụng (giống như VBA cho sản phẩm nội bộ của chúng tôi cho các macro nhanh). Hầu hết các tệp có dung lượng khoảng 300-400 KB. Nhưng khi họ vượt quá 100 MB, quy trình có một thời gian khó khăn (như bạn mong đợi).Đọc các tệp văn bản lớn có dòng trong C#
Điều gì xảy ra là tệp được đọc và đẩy vào RichTextBox sau đó được điều hướng - đừng lo lắng quá nhiều về phần này.
Các nhà phát triển người viết mã ban đầu chỉ đơn giản là sử dụng một StreamReader và làm
[Reader].ReadToEnd()
mà có thể mất nhiều thời gian để hoàn thành.
Nhiệm vụ của tôi là chia nhỏ mã này, đọc nó thành các phần vào bộ đệm và hiển thị thanh tiến trình có tùy chọn hủy bỏ nó.
Một số giả thiết:
- Hầu hết các tập tin sẽ được 30-40 MB
- Nội dung của tập tin là văn bản (không nhị phân), một số là định dạng Unix, một số là hệ điều hành DOS.
- Khi nội dung được truy xuất, chúng tôi sẽ tìm ra trình kết thúc nào được sử dụng.
- Không ai quan tâm một khi nó được tải thời gian cần để hiển thị trong hộp văn bản richtextbox. Nó chỉ là tải ban đầu của văn bản.
Bây giờ cho các câu hỏi sau:
- Tôi có thể chỉ cần sử dụng StreamReader, sau đó kiểm tra tài sản Chiều dài (vì thế ProgressMax) và ban hành một đọc cho một kích thước bộ đệm và lặp thông qua trong một thời gian vòng lặp KHI bên trong một nhân viên nền, do đó, nó không chặn các chủ đề giao diện người dùng chính? Sau đó quay trở lại trình xây dựng chuỗi thành chuỗi chính sau khi hoàn tất.
- Nội dung sẽ đi đến một StringBuilder. thế nào tôi có thể khởi tạo StringBuilder với kích thước của luồng nếu độ dài có sẵn?
Đây có phải là những ý tưởng hay không? Tôi đã có một vài vấn đề trong quá khứ với việc đọc nội dung từ các luồng, bởi vì nó sẽ luôn luôn bỏ lỡ vài byte cuối cùng hoặc một cái gì đó, nhưng tôi sẽ hỏi một câu hỏi nếu đây là trường hợp.
Tập lệnh tập lệnh 30-40MB? Thánh cá thu! Tôi ghét phải viết mã xem lại ... – dthorpe
Chỉ là một vài dòng mã. Xem thư viện này tôi đang sử dụng để đọc các tập tin lớn hơn 25GB và nhiều hơn nữa. https://github.com/Agenty/FileReader/ – Vicky