Я просто изучаю C# (занимаюсь этим около двух дней), и я решил, что для оплодотворения я перестрою старое приложение, которое я сделал в 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 делать проверку с «EXISTS» собственность, но я специально искал способ поиска существующий сбор/список файлов, а не живые проверки файловой системы для каждого файла, так как я буду делать поэтому по сети и постоянно возвращаясь к многотысячному файловому каталогу, медленная медленная медленная работа.
Спасибо заранее.
Также для вспомогательных каталогов используется Path.Combine (sourcePath, subDir.Name) вместо sourcePath + subDir.Name –
Также посмотрите на метод GetFileSystemInfos: http://msdn.microsoft.com/en-us/ library/system.io.directoryinfo.getfilesysteminfos.aspx – Svish
Что касается вашей заметки: я понимаю, но это риск, который я принимаю, перегружая работу с получением списка файлов, поэтому мне не нужно делать индивидуальные проверки на множество -thousand файлов. Большое спасибо за ваш ответ, я прошу проверить синтаксис «Любые»! – Dereleased