2009-10-08 42 views
5

Tôi đang viết một chương trình đơn giản được sử dụng để đồng bộ hóa các tệp vào một FTP. Tôi muốn có thể kiểm tra xem phiên bản cục bộ của tệp có khác với phiên bản từ xa không, vì vậy tôi có thể biết liệu tệp có cần được chuyển hay không. Tôi có thể kiểm tra kích thước tập tin, nhưng đó không phải là 100% đáng tin cậy bởi vì rõ ràng nó có thể cho hai tập tin có cùng kích thước nhưng chứa dữ liệu khác nhau. Ngày/giờ các tệp đã được sửa đổi cũng không đáng tin cậy vì ngày máy tính của người dùng có thể được đặt sai.Làm cách nào để biết tệp trên FTP giống với tệp cục bộ có thực sự tải xuống tệp không?

Có cách nào khác để biết tệp cục bộ và tệp trên FTP giống hệt nhau không?

Trả lời

5

Không có cách nào chung. Nếu trang web ftp bao gồm một tệp kiểm tra, bạn có thể tải xuống tệp đó (sẽ nhanh hơn rất nhiều kể từ khi kiểm tra là khá nhỏ) và sau đó xem liệu tổng kiểm có khớp không. Nhưng tất nhiên, điều này phụ thuộc vào chủ sở hữu của trang ftp tạo tệp kiểm tra và cập nhật nó.

Sau đó, bạn là S.O.L.

1

Sử dụng tổng kiểm tra. Bạn tạo md5 (hoặc sha1, sha2 etc) băm của cả hai tệp và nếu các tệp giống hệt nhau, thì các băm sẽ giống nhau.

+3

Tính năng này hoạt động như thế nào mà không tải xuống? –

+0

Vâng, nó hoạt động nếu bạn có quyền kiểm soát ftp và có thể tạo tổng kiểm tra bất cứ khi nào tệp được tải lên ... về mặt kỹ thuật vẫn là bản tải xuống, tôi cho rằng đó không phải là tệp tải xuống có kích thước tùy ý. – neminem

2

Nếu máy chủ là FTP cũ, bạn không thể làm tốt hơn kiểm tra kích thước và dấu thời gian.

FTP không có cơ chế cung cấp cho bạn các tệp băm/tổng kiểm tra, vì vậy bạn cần phải làm một việc gì đó như giữ một "tệp danh sách" đặc biệt có tất cả tên tệp và băm hoặc thực hiện yêu cầu riêng qua HTTP, hoặc một số giao thức khác.

Lý tưởng nhất, bạn không nên sử dụng FTP anyway, nó thực sự là một giao thức lỗi thời. Nếu bạn có quyền kiểm soát hệ thống, bạn có thể sử dụng rsync hoặc một cái gì đó tương tự.

1

IETF đã cố gắng thực hiện điều này bằng cách thêm các lệnh FTP mới như MD5 và MMD5.

http://www.faqs.org/rfcs/ftp-rfcs.html

Tuy nhiên, không có nhà cung cấp FTP nào hỗ trợ chúng. Vì vậy, bạn phải có một kiểm tra trên máy chủ FTP nhắm mục tiêu bạn ứng dụng sẽ làm việc chống lại để xem nếu nó hỗ trợ MD5/MMD5. Nếu không, bạn có thể nhận các giải pháp được đề cập ở trên.

0

Bất cứ khi nào các file cập nhật khách hàng của bạn đến máy chủ FTP, bản đồ mỗi tập tin để băm nó và lưu nó cục bộ trên máy tính khách hàng (hoặc lưu trữ nó bất cứ nơi nào bạn có thể truy cập sau, vấn đề định dạng doesnt, có thể là một tập tin xml, văn bản thuần túy, miễn là bạn có thể truy xuất cặp khóa/giá trị). Sau đó, khi bạn tải lên các tập tin một lần nữa chỉ cần kiểm tra các tập tin địa phương với bảng băm bạn tạo ra, nếu nó là khác nhau sau đó tải lên các tập tin. Bằng cách này bạn không phải dựa vào máy chủ để duy trì một tệp kiểm tra và bạn không cần phải có quá trình chạy để theo dõi các sự kiện FileSystemWatcher.

Các vấn đề liên quan