Перебирая все файлы для указания c системной даты - C# - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь скопировать все файлы для указанной c системной даты из каталога в другой каталог. Однако все файлы копируются, а не только на указанную дату. Если мы предположим, что файлы находятся под c:\testfiles\

Date_Modified            Name 
2/14/2020 5:00 AM        txt_1.csv
2/14/2020 5:30 AM        txt_2.csv 
2/14/2020 6:00 AM        txt_3.csv 
2/13/2020 6:00 AM        txt_4.csv 
2/13/2020 6:15 AM        txt_5.csv 

Приведенный ниже код должен получить самую последнюю дату, которая здесь 2/14/2020, и l oop через файлы только для 2/14. Но этот код также собирает 2/13 файлов.

// this gives me the latest date.
DateTime dt = File.GetLastWriteTime(LatestFile);
DateTime dateonly = dt.Date;

// this is the code which I assumed would loop through only 2/14, but it is looping through all files. 
 var latestFiles = Directory.GetFiles(sourcepath).Where(x => new FileInfo(x).CreationTime.Date == dt.Date);
                foreach (string s in latestFiles)
                {

                     string destfile = targetPath + System.IO.Path.GetFileName(s);
                     System.IO.File.Copy(s, destfile, true);
                }

Как я могу скопировать только файлы за 2/14 в другой каталог? Мне нужно найти самую последнюю дату и скопировать все файлы с этой датой в другой каталог.

Что мне не хватает?

1 Ответ

0 голосов
/ 25 февраля 2020

Что я вижу, даты отличаются для последнего файла, который вы берете GetLastWriteTime и сравнивает с CreationTime

static void Main(string[] args)
    {
        var path = "c:/test"; //Create the directory with some files
        var latestFile = "c:/test/test2.txt"; // Name of one file which is in c:/test
        var targetPath = "c:/test2"; //Create the directory

        Directory.GetFiles(path)
            .Where(e => File.GetLastWriteTime(e).Date.Equals(File.GetLastWriteTime(latestFile).Date))
            .ToList()
            .ForEach(e =>
            {
                Console.WriteLine($"Copying {e}");
                File.Copy(e, Path.Join(targetPath, Path.GetFileName(e)), true);
            });
    }
...