我剛剛學習C#(已經擺弄它大約2天了),並且我已經決定,爲了學習目的,我將重建一個我在VB6中用於同步文件(通常通過網絡)的舊應用程序。如何在C#中將一個文件集合與另一個文件進行比較?
當我在VB 6編寫的代碼,它的工作大致是這樣的:
- 創建
Scripting.FileSystemObject
- 源和目的地創建目錄對象
- 創建文件,列出了源對象和目的地
- 遍歷源對象,並檢查它是否存在於目標中
- 如果沒有,創建它
- 如果是這樣,請檢查源版本更新/大,如果是這樣,覆蓋其他
到目前爲止,這是我所:
private bool syncFiles(string sourcePath, string destPath) {
DirectoryInfo source = new DirectoryInfo(sourcePath);
DirectoryInfo dest = new DirectoryInfo(destPath);
if (!source.Exists) {
LogLine("Source Folder Not Found!");
return false;
}
if (!dest.Exists) {
LogLine("Destination Folder Not Found!");
return false;
}
FileInfo[] sourceFiles = source.GetFiles();
FileInfo[] destFiles = dest.GetFiles();
foreach (FileInfo file in sourceFiles) {
// check exists on file
}
if (optRecursive.Checked) {
foreach (DirectoryInfo subDir in source.GetDirectories()) {
// create-if-not-exists destination subdirectory
syncFiles(sourcePath + subDir.Name, destPath + subDir.Name);
}
}
return true;
}
我已閱讀,似乎使用的FileInfo或DirectoryInfo的對象做檢查的「存在」屬性倡導的例子,但我特別尋找一種方式來搜索文件的現有集合/列表,而不是對每個文件的文件系統進行實時檢查,因爲我會這樣做所以在整個網絡中不斷回溯到數千個文件目錄的速度緩慢緩慢。
在此先感謝。
也爲子目錄使用Path.Combine(sourcePath,subDir.Name),而不是sourcePath + subDir.Name – 2009-12-06 11:11:55
也看看GetFileSystemInfos方法:http://msdn.microsoft.com/en-us/庫/ system.io.directoryinfo.getfilesysteminfos.aspx – Svish 2009-12-06 11:15:11
至於你的筆記:我明白了,但它是我承擔了風險,前期投資獲取文件列表的操作,所以我沒有做單獨存在於許許多多的檢查 - 千個文件。非常感謝您的回答,我想查看「Any」的語法! – Dereleased 2009-12-06 11:19:24