2013-12-09 73 views
0

我有一個FTP服務器上的數千個文件,我可以使用Windows資源管理器進行連接。一天一天,在晚上,我必須找到今天更改(上傳)並記下他們名字的文件。 我想開發一個可視化的基本批處理應用程序,只需使用參數(日期)運行EXE,獲取這些文件的名稱列表。如何獲取今天更新的文件列表? .NET

最近,我在這裏找到這段代碼:

source = "\\ftp_my\Upload\" 
searchfor = "*" 
Dim dirs As String() = Directory.GetFiles(source, searchfor) 
For Each file In dirs 
    fileinfo = New FileInfo(file) 
    If (fileinfo.LastWriteTime >= DateAdd(DateInterval.Day, -1, Date.Today)) Then 
     'execute my actions 
    End If 
Next 

但它需要一個不可信的時間列出所有文件,並評估其性能。另一方面,如果我只是做一個「dir」,導出爲ex​​cel,分割文本並手動評估我想要的日期/文件,那麼我早於VB完成該研究!

因此,應該有一個命令列出日期DESC在合理期限內排序的文件,是嗎?

+0

你的兩個場景之間唯一的區別是你沒有'If'語句嗎? –

+1

代碼中的「執行我的操作」需要多長時間? –

+0

我的操作只是將文件名和日期寫入C:\ TEMP文件夾中。 – Gustavo

回答

2

我注意到,可以減慢你的迭代速度。

您正在將每個文件名轉換爲fileinfo對象,而不是使用fileinfo對象的集合。

您正在計算檢查每個文件的目標日期,而不是計算一次。

這裏是做你想使用什麼LINQ會發現1000個文件(最壞的情況下),映射的網絡驅動器上的方法,在不到5秒鐘:

Dim source = New DirectoryInfo("\\ftp_my\Upload\") 
    Dim searchfor = "*" 
    Dim TargetDate = DateAdd(DateInterval.Day, -1, Date.Today) 
    Dim dirs = (From f As FileInfo In source.GetFiles(searchfor) 
       Where f.CreationTime >= TargetDate 
       Select f).ToList 

顯示目錄將包含所有的FileInfo您想要定位每個文件的對象。

如果通過dirs迭代並在每個文件上完成您的操作需要很長時間,那麼這會告訴您時間花在哪裏,您可以開始查看該代碼並開始優化它以縮短時間。

+0

那麼tinstaafl,我嘗試了你的建議,並列出4300個文件,使用你的解決方案,我得到了36分鐘 - 這與前一個沒有太大的不同。 Peharps的問題在於網絡連接,儘管我不明白爲什麼會發生這樣的基本信息。另外,我採取的「行動」只是將文件名寫入c:\ temp - 因此它不應該是一個問題。 – Gustavo

+0

此外,_這裏有一種方法可以在5秒內在映射的網絡驅動器上找到1000個使用LINQ的文件(最糟糕的情況):_ 我使用的服務帳戶不能創建網絡驅動器,因此我必須使用** \\ ftp_asd \ Upload **,當然,您明白我不應該發佈正確的地址。 – Gustavo

+0

是的。這些信息只是爲了說明我得到的結果是什麼情況。由於您通過網絡訪問文件,您應該能夠獲得類似的結果。你的問題可能與網絡有關。嘗試並計算您的吞吐量,您在多長時間內轉移多少數據,並將其與其他網站的數據傳輸進行比較。 – tinstaafl

相關問題