Я пытаюсь создать простое консольное приложение «копирование каталога / файла» в C #. Мне нужно скопировать все папки и файлы (сохраняя исходную иерархию) с одного диска на другой, как с диска C: \ Data на диск E: \ Data.
Однако я хочу, чтобы он только копировал НОВЫЕ или ИЗМЕНЕННЫЕ файлы из источника в место назначения.
Если файл на целевом диске более новый, чем файл на исходном диске, он не копируется.
(проблема)
В коде, который у меня есть, он сравнивает файл "abc.pdf" в исходном файле с файлом "xyz.pdf" в месте назначения и, таким образом, перезаписывает файл назначения тем, что находится в источнике, даже если файл назначения является более новым , Я пытаюсь выяснить, как заставить его сравнить «abc.pdf» в источнике с «abc.pdf» в месте назначения.
Это работает, если я детализирую источник и место назначения до определенного файла, но когда я возвращаюсь к уровню папки, он перезаписывает файл места назначения исходным файлом, даже если файл места назначения новее.
(мои решения - это не сработало)
Я подумал, поставив «if (file.LastWriteTime> destination.LastWriteTime)» после команды «foreach», чтобы он сравнивал файлы в двух папках, от источника File1 до места назначения File1, но это не так.
Кажется, я что-то упускаю в выражениях «FileInfo []», «foreach» или «if», чтобы сделать это сравнение один к одному. Я думаю, что может быть какая-то ссылка на оператор «Path.Combine» или «SearchOption.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));
}
}
}