簡體   English   中英

如何判斷文件是否已完成FTP?

[英]How can I tell if a file has finished being FTPed?

我們有一個C#Windows服務輪詢一個等待FTP文件發布的文件夾。為了避免在文件仍被寫入時使用該文件,我們首先嘗試鎖定文件,但是,似乎有在創建FTP文件之后但在寫入文件之前我們獲取文件鎖定的情況,因此我們最終打開一個空文件。

有沒有可靠的判斷FTP是否完整?

您可以在上傳之前更改文件名,然后在完成后重命名。 那樣它看起來好像直到完成才存在。

我見過的一種做法是你傳輸兩個文件,一個是實際文件,然后是另一個我們可以調用.done文件的文件。 理想的是,只要您看到.done文件就知道第一個文件應該完成。

其他選項包括觀察文件進行修改並等待一段時間沒有修改。 當然這不是完全證據。

編輯

Kyle明確指出,在.done文件中添加校驗和和/或指示第一個文件的大小是對邊緣情況的良好保護。

我一直是.filepart協議的忠實粉絲,所以無論你使用什么傳輸協議(ftp,ssh,rsync等),你都有相同的理解。

這不是您問題的直接答案,但不是搜索僅支持ftp的解決方案,從長遠來看,更通用的解決方案對您來說可能更好。

(.filepart:將文件重命名為test.txt到test.txt.filepart,然后在完成后,將其命名為test.txt)

如何使用文件夾觀察器索引內容,如果文件大小在5分鍾內沒有變化,你可以非常保證上傳已經完成。

超時可能與FTP服務器的超時有關。

http://www.codeproject.com/KB/files/MonitorFolderActivity.aspx

我一直使用校驗和文件。 因此,您發送一個校驗和文件,表示文件大小和校驗和。 當第一個文件中的校驗和與文件系統上的實際校驗和匹配時,您將知道文件已正確上載。

我過去使用的方法是這里的一些其他回復的混合。 即使用與預期的擴展名不同的擴展名(例如FILENAME.part)來FTP文件,然后使用適當的擴展名將其重命名為上傳的最后一步。

在服務器上,使用FileSystemWatcher查找具有正確擴展名的新文件。 FSW在重命名之前不會看到該文件,並且重命名操作是原子的,因此文件將在重命名時完成並可用。

重命名或移動文件當然取決於您是否可以控制上傳過程。

如果您無法控制文件的上傳方式,那么您將無法使用FSW知道正在上傳的文件,然后監控文件的大小 - 當它長時間保持不變時,您可以假設它完整​​了。

您可能希望查看System.IO.FileSystemWatcher而不是輪詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM