Đọc một tập tin tích cực được viết


3

Tôi đang tải xuống một tệp lớn qua FTP để tôi có thể xử lý tệp trên hệ thống cục bộ của mình. Chương trình xử lý tệp đọc từng dòng tệp trong một lần chạy, tạo hai tệp mới từ bản gốc.

Có thể bắt đầu xử lý tệp trước khi tải xuống hoàn toàn không? Các vấn đề tiềm năng với điều này là gì?

Lưu ý : Tôi không thực sự lo lắng về việc chương trình đến cuối tệp trước khi tải xuống xong - tệp đang được tải xuống nhanh hơn chương trình có thể xử lý dữ liệu.

Câu trả lời:


5

Có thể, nếu chương trình đọc dữ liệu tuần tự từ đầu. (Một số, chẳng hạn như unzip, cố gắng tìm đến cuối tệp trước.)


1
unzipkhông phải vì nén mà vì cách cấu trúc các tệp Zip: với tất cả siêu dữ liệu tệp ở cuối. Các chương trình nén luồng, chẳng hạn như gziphoặc xz, không hoạt động theo cách này và có thể xử lý các tệp được viết chủ động.
grawity

5

Giả sử rằng tệp không được nén, bạn có thể thử các cách sau trên Linux:

wget -O - www.fileserver.com/file.ext | tee outputfile.out | ./someprogram

-O -sẽ gây wgetra đầu ra tệp stdoutmà sau đó sẽ được dẫn đến someprogram trong khi teesẽ lưu một bản sao của wgetđầu ra outputfile.


3

Có thể bắt đầu xử lý tệp trước khi tải xuống hoàn toàn không?

Vâng

Các vấn đề tiềm năng với điều này là gì?

Khi đạt EOF - làm thế nào để xác định xem đó có thực sự là EOF hay không, nếu đầu đọc chỉ nhanh hơn đầu thu và chỉ cần đợi một giây trước khi thử lại đọc?

Giải pháp cho vấn đề này sẽ là:

  • sử dụng thời gian chờ - nếu kích thước tệp không thay đổi nữa trong vài phút, việc chuyển có thể được coi là hoàn tất. Tôi không thích giải pháp này vì người ta không bao giờ biết, nếu việc chuyển tiền bị chấm dứt hay nếu kết nối bị mất.

  • hãy thử lấy kích thước tệp trước - nếu sử dụng máy chủ ftp, người ta thường có thể thực hiện lệnh 'dir' để lấy kích thước tệp trước khi tải xuống. Giá trị này có thể được chuyển cho chương trình đọc

  • tạo tập lệnh tải xuống để tạo tệp 'hoàn tất chuyển' mà chương trình đọc có thể kiểm tra khi gặp EOF.

Lưu ý: Tôi không thực sự lo lắng về việc chương trình đến cuối tệp trước khi tải xuống xong - tệp đang được tải xuống nhanh hơn chương trình có thể xử lý dữ liệu.

Bạn nên - thực sự! Điều gì xảy ra nếu kết nối mạng chậm hơn bình thường chỉ vì một số chuyển khoản khác đang diễn ra? Nó sẽ ổn để mất dữ liệu trong trường hợp này?


1

Đây có thể là một ứng cử viên tốt cho đường ống. Sử dụng máy khách FTP ghi vào đầu ra tiêu chuẩn có chương trình tách được đọc từ đầu vào tiêu chuẩn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.