Подтвердить что ты не робот

Скопировать файл, перезаписать, если новый

В С#.NET, как копировать файл в другое место, перезаписывая существующий файл, если исходный файл является более новым, чем существующий файл (имеет более позднюю "Измененную дату" ), и отмечая, что исходный файл старше

4b9b3361

Ответ 1

Вы можете использовать класс FileInfo и его свойства и методы:

FileInfo file = new FileInfo(path);
string destDir = @"C:\SomeDirectory";
FileInfo destFile = new FileInfo(Path.Combine(destDir, file.Name));
if (destFile.Exists)
{
    if (file.LastWriteTime > destFile.LastWriteTime)
    { 
        // now you can safely overwrite it
        file.CopyTo(destFile.FullName, true);
    }
}

Ответ 2

Вы можете использовать класс FileInfo:

FileInfo infoOld = new FileInfo("C:\\old.txt");
FileInfo infoNew = new FileInfo("C:\\new.txt");

if (infoNew.LastWriteTime > infoOld.LastWriteTime)
{
    File.Copy(source path,destination path, true) ;
}

Ответ 3

Вот мой ответ: Копии не перемещают содержимое папки. Если цель не существует, код становится более понятным для чтения. Технически создание файловой системы для несуществующего файла будет иметь значение LastWriteTime of DateTime.Min, поэтому будет копировать, но немного сократит читаемость. Надеюсь, этот проверенный код поможет кому-то.

** EDIT: я обновил свой источник, чтобы быть более гибким. Поскольку он был основан на этом потоке, я разместил здесь обновление. При использовании масок поддиры не создаются, если вложенная папка не содержит сопоставленных файлов. Конечно, более надежный обработчик ошибок в вашем будущем.:)

public void CopyFolderContents(string sourceFolder, string destinationFolder)
{
    CopyFolderContents(sourceFolder, destinationFolder, "*.*", false, false);
}

public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask)
{
    CopyFolderContents(sourceFolder, destinationFolder, mask, false, false);
}

public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask, Boolean createFolders, Boolean recurseFolders)
{
    try
    {
        if (!sourceFolder.EndsWith(@"\")){ sourceFolder += @"\"; }
        if (!destinationFolder.EndsWith(@"\")){ destinationFolder += @"\"; }

        var exDir = sourceFolder;
        var dir = new DirectoryInfo(exDir);
        SearchOption so = (recurseFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);

        foreach (string sourceFile in Directory.GetFiles(dir.ToString(), mask, so))
        {
            FileInfo srcFile = new FileInfo(sourceFile);
            string srcFileName = srcFile.Name;

            // Create a destination that matches the source structure
            FileInfo destFile = new FileInfo(destinationFolder + srcFile.FullName.Replace(sourceFolder, ""));

            if (!Directory.Exists(destFile.DirectoryName ) && createFolders)
            {
                Directory.CreateDirectory(destFile.DirectoryName);
            }

            if (srcFile.LastWriteTime > destFile.LastWriteTime || !destFile.Exists)
            {
                File.Copy(srcFile.FullName, destFile.FullName, true);
            }
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace);
    }
}

Ответ 4

В пакетном файле это будет работать:

XCopy "c:\my directory\source.ext" "c:\my other directory\dest.ext" /d