Tôi không rõ vấn đề thực tế của bạn là gì, vì vậy tôi sẽ đưa ra một vài suy nghĩ.
- Bạn có muốn bản sao có thể khởi động lại (với kích thước tệp nhỏ như vậy, có vẻ như đó không phải là một giao dịch lớn)? Nếu có, hãy xem CopyFileEx with COPYFILERESTARTABLE
- Bạn có muốn bản sao có thể xác minh không? Có vẻ như bạn đã có bằng cách xác minh băm.
- Bạn có muốn có hiệu suất tốt hơn không? Nó sẽ khó khăn, vì có vẻ như bạn không thể chạy bất cứ thứ gì trên máy chủ. Nếu không, TransmitFile có thể hữu ích.
- Bạn chỉ muốn lửa và quên hoạt động? Tôi cho rằng bắn phá để cướp, hoặc TeraCopy hoặc một cái gì đó sẽ làm việc - nhưng có vẻ như một chút hacky với tôi.
- Bạn có muốn biết khi nào mạng trở lại? IsNetworkAlive có câu trả lời của bạn.
Dựa trên những gì tôi biết cho đến nay, tôi nghĩ rằng pseudo-code sau đây sẽ là cách tiếp cận của tôi:
sourceFile = Compress("*.*");
destFile = "X:\files.zip";
int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE;
while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) {
do {
// optionally, increment a failed counter to break out at some point
Sleep(1000);
while (!IsNetworkAlive(NETWORKALIVELAN));
}
Nén các tập tin đầu tiên giúp bạn tiết kiệm theo dõi các tập tin mà bạn đã sao chép thành công, và bạn cần khởi động lại cái gì. Nó cũng sẽ làm cho các bản sao đi nhanh hơn (kích thước tập tin nhỏ hơn tổng số, và kích thước tập tin duy nhất lớn hơn), tại các chi phí của một số sức mạnh CPU trên cả hai mặt. Một tập tin thực thi đơn giản có thể giải nén nó ở phía máy chủ.
Nguồn
2008-08-21 10:54:09
Đó chính xác là những gì mà BITS thực hiện. – TheSmurf