Как скопировать только новые или измененные файлы в C#
Я знаю, что это, вероятно, было сделано и обсуждено бесчисленное количество раз, но я не могу найти ответ, который я ищу.
Я пытаюсь создать простое консольное приложение “копия каталога/файла" на языке C#. Что мне нужно, так это скопировать все папки и файлы (сохраняя исходную иерархию) с одного диска на другой, например с диска C:\Data чтобы вести машину E:\Data.
Однако я хочу, чтобы он только копировал любые новые или измененные файлы из источника в пункт назначения.
Если файл на целевом диске новее, чем на исходном диске, то он не копируется.
(проблема)
В коде, который у меня есть, он сравнивает файл "abc.pdf" в исходном коде с файлом "xyz.pdf" в целевом коде и, таким образом, перезаписывает целевой файл с тем, что находится в исходном коде, даже если конечный файл является более новым. Я пытаюсь понять, как сделать так, чтобы он сравнивал "abc.pdf" в источнике с "abc.pdf" в пункте назначения.
Это работает, если я детализирую исходный и конечный файлы до определенного файла, но когда я возвращаюсь на уровень папки, он перезаписывает конечный файл исходным файлом, даже если конечный файл является более новым.
(мои решения – это не сработало)
Я подумал, поставив “если (файл.LastWriteTime > пункт назначения.LastWriteTime)” после команды “foreach”, что он будет сравнивать файлы в двух папках, File1 source и File1 destination, но это не так.
Похоже, я что-то упускаю в операторах “FileInfo []”, “foreach” или “if”, чтобы сделать это сравнение один к одному. Я думаю, может быть, какая-то ссылка на “путь".Комбинируйте” оператор "или “поисковый вариант".AllDirectories”, но я не уверен.
Есть предложения?
Как вы можете видеть из моего базового примера кода, я новичок в C#, поэтому, пожалуйста, сформулируйте свой ответ простыми словами.
Спасибо.
Ниже приведен код, который я пробовал, но он не работает.
Что я уже пробовал:
class Copy { public static void CopyDirectory(DirectoryInfo source, DirectoryInfo destination) { if (!destination.Exists) { destination.Create(); } // Copy files. FileInfo[] files = source.GetFiles(); FileInfo[] destFiles = destination.GetFiles(); foreach (FileInfo file in files) foreach (FileInfo fileD in destFiles) // Copy only modified files if (file.LastWriteTime > fileD.LastWriteTime) { file.CopyTo(Path.Combine(destination.FullName, file.Name), true); } // Copy all new files else if (!fileD.Exists) { file.CopyTo(Path.Combine(destination.FullName, file.Name), true); } // Process subdirectories. DirectoryInfo[] dirs = source.GetDirectories(); foreach (DirectoryInfo dir in dirs) { // Get destination directory. string destinationDir = Path.Combine(destination.FullName, dir.Name); // Call CopyDirectory() recursively. CopyDirectory(dir, new DirectoryInfo(destinationDir)); } } }