Самый быстрый способ копирования файлов в каталогах и подкаталогах по дате изменения

Я хотел бы знать, как мне скопировать файлы в каталог, который содержит подкаталоги, и в них он содержит некоторые файлы с датой изменения.

Теперь мне нужно скопировать все эти файлы в другой каталог.

Это то, что у меня есть, которое копирует все файлы и папки, но мне нужны только файлы в папках, которые были изменены за два дня до сегодняшней даты. (Например: сегодня дата 26-02-2014. Мне нужно скопировать все файлы с 24-02-2014 и ниже этой даты в другую папку)

  Public Sub CopyDirectory(ByVal sourcePath As String, ByVal destinationPath As String)
    Dim sourceDirectoryInfo As New System.IO.DirectoryInfo(sourcePath)

    ' If the destination folder don't exist then create it
    If Not System.IO.Directory.Exists(destinationPath) Then
        System.IO.Directory.CreateDirectory(destinationPath)
    End If

    Dim fileSystemInfo As System.IO.FileSystemInfo
    For Each fileSystemInfo In sourceDirectoryInfo.GetFileSystemInfos
        Dim destinationFileName As String =
            System.IO.Path.Combine(destinationPath, fileSystemInfo.Name)

        ' Now check whether its a file or a folder and take action accordingly
        If TypeOf fileSystemInfo Is System.IO.FileInfo Then
            System.IO.File.Copy(fileSystemInfo.FullName, destinationFileName, True)
        Else
            ' Recursively call the mothod to copy all the neste folders
            CopyDirectory(fileSystemInfo.FullName, destinationFileName)
        End If
    Next
End Sub

И это код, который копирует только файлы в папке и не добавляет новую папку, которая находится в исходном пути:

Dim Source As New DirectoryInfo("C:\Users\username\Desktop\123")
    Dim Target As New DirectoryInfo("C:\Users\username\Desktop\345")

    Dim Files As FileInfo() =
        (From [File] As FileInfo In Source.GetFiles("*", SearchOption.AllDirectories)
         Where [File].LastWriteTime.Date.Equals(Date.Today.AddDays(-2))).ToArray

    For Each [File] As FileInfo In Files
        IO.File.Copy([File].FullName, 
                     Path.Combine(Target.FullName, [File].Name), True)
    Next [File]

Так может кто-нибудь сказать, как мне этого добиться?

2 ответа

Вот ссылка, которая отвечает на ваш запрос - Скопируйте все содержимое каталога в C#

В вашем случае вам нужно будет добавить условие перед копированием файла. Что-то вроде того, что показано ниже, или того, которое Джон использовал в своем ответе

    if (File.GetLastWriteTime(path).CompareTo(DateTime.Today) <= -2)
    {
    ...
    }

В C# объект File имеет методы для определения даты модификации. Итак, вы можете сделать что-то вроде этого:

DateTime today = DateTime.Today;
foreach (string filename in Directory.GetFiles("C:\\Users\\username\\Desktop\\123")) {
    DateTime fileModDate = File.GetLastWriteTime(filename);
    if (fileModDate < today.AddDays(-2)) {
        File.Copy(filename, destination);
    }
}
Другие вопросы по тегам