Самый быстрый способ копирования файлов в каталогах и подкаталогах по дате изменения
Я хотел бы знать, как мне скопировать файлы в каталог, который содержит подкаталоги, и в них он содержит некоторые файлы с датой изменения.
Теперь мне нужно скопировать все эти файлы в другой каталог.
Это то, что у меня есть, которое копирует все файлы и папки, но мне нужны только файлы в папках, которые были изменены за два дня до сегодняшней даты. (Например: сегодня дата 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);
}
}