Как я могу скопировать файл с определенной датой в C # - PullRequest
1 голос
/ 04 февраля 2011

У меня есть проблема с моим кодом, я могу заставить его скопировать все файлы в каталоге и его подкаталогах, и у меня есть оператор if, говорящий, чтобы он копировал файл, если дата изменения такая же, как сегодня, но все равно скопируйте все файлы, которые я искал в интернете, чтобы найти решение, и все они приходят с расплывчатыми ответами, похожими на те, что у меня уже есть, я вставил код ниже.

DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath);
DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath);

DirectoryInfo dir = new DirectoryInfo(dlg.SelectedPath);
FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo fi in fis)
{
    if (fi.LastWriteTime.Date == DateTime.Today.Date)
    {
        FileInfo[] sourceFiles = source.GetFiles("*", SearchOption.AllDirectories);
        foreach (FileInfo fc in sourceFiles)
            if (fc.LastWriteTime.Date == DateTime.Today.Date)
                for (int i = 0; i < sourceFiles.Length; ++i)
                    File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
    }
}

любая помощь будет оценена

Ответы [ 4 ]

3 голосов
/ 04 февраля 2011

Разве это не должно быть так?

FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo fi in fis)
{
    if (fi.LastWriteTime.Date == DateTime.Today.Date)
    {
        File.Copy(fi.FullName, target.FullName + "\\" + fi.Name, true);
    }
}

Дело в том, что сейчас, когда вы находите файл, который удовлетворяет вашим условиям, вы копируете все файлы из исходной папки в целевую папку, что не так.Вам следует копировать только те файлы, которые вам нужны.

Приведенный выше код будет работать только для файлов в корневой папке, но его легко настроить и для подпапок.Просто создайте другую функцию, которая находит все подпапки в папке, и вызовите приведенный выше код с каждой из подпапок в качестве параметров.

1 голос
/ 04 февраля 2011

В качестве альтернативы вы можете использовать запрос LINQ, например:

DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath);
DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath);

var files = source.GetFiles("*", SearchOption.AllDirectories).Where(file => file.LastWriteTime.Date.Equals(DateTime.Today.Date));
foreach (FileInfo file in files)
    File.Copy(file.FullName, target.FullName + "\\" + file.Name, true);
1 голос
/ 04 февраля 2011

Точность DateTime в FileSystem и в .net не одинакова.

Попробуйте что-то вроде этого:

if((Math.Abs((currentFile.LastWriteTime - DateTime.Today.Date).TotalMilliseconds) > tolerance){...}
0 голосов
/ 04 февраля 2011

Я думаю, что вы пропустили отступ или круглые скобки после оператора if, я думаю, что это пустой, если после оператора копирования делать

if (date == date) 
{ 
   filecopy 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...