Каков наилучший способ найти последнее время последнего изменения папки файлов? - PullRequest
3 голосов
/ 29 декабря 2008

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

Ответы [ 6 ]

3 голосов
/ 29 декабря 2008

зависит от того, как вы хотите это сделать. Вы хотите, чтобы программное обеспечение запускалось, а затем искало его или постоянно работало и отслеживало его?

в последнем случае полезно использовать класс FileSystemWatcher.

2 голосов
/ 29 декабря 2008

Используйте объект FileSystemWatcher.

Dim folderToWatch As New FileSystemWatcher
folderToWatch.Path = "C:\FoldertoWatch\"
AddHandler folderToWatch.Created, AddressOf folderToWatch_Created
folderToWatch.EnableRaisingEvents = True
folderToWatch.IncludeSubdirectories = True
Console.ReadLine()

Затем просто создайте обработчик (здесь он называется folderToWatch_Created) и выполните что-то вроде:

Console.WriteLine("File {0} was just created.", e.Name)
1 голос
/ 29 декабря 2008

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

1 голос
/ 29 декабря 2008

Использование FileSystemWatcher будет работать при условии, что вам нужно знать эту информацию только после загрузки приложения. В противном случае вам все еще нужно цикл. Примерно так будет работать (и не использовать рекурсию):

Stack<DirectoryInfo> dirs = new Stack<DirectoryInfo>();
FileInfo mostRecent = null;

dirs.Push(new DirectoryInfo("C:\\TEMP"));

while (dirs.Count > 0) {
    DirectoryInfo current = dirs.Pop();

    Array.ForEach(current.GetFiles(), delegate(FileInfo f)
    {
        if (mostRecent == null || mostRecent.LastWriteTime < f.LastWriteTime)
            mostRecent = f;
    });

    Array.ForEach(current.GetDirectories(), delegate(DirectoryInfo d)
    {
        dirs.Push(d);
    });
}

Console.Write("Most recent: {0}", mostRecent.FullName);
0 голосов
/ 10 марта 2010
void Main()
{
    string startDirectory = @"c:\temp";
    var dir = new DirectoryInfo(startDirectory);

    FileInfo mostRecentlyEditedFile =
        (from file in dir.GetFiles("*.*", SearchOption.AllDirectories)
         orderby file.LastWriteTime descending
         select file).ToList().First();

    Console.Write(@"{0}\{1}", 
        mostRecentlyEditedFile.DirectoryName, 
        mostRecentlyEditedFile.Name);
}
0 голосов
/ 29 декабря 2008

Если у вас установлен PowerShell , команда будет

dir -r | select Name, LastWriteTime | sort LastWriteTime -DESC | select -first 1

Таким образом, сценарий может запускаться по мере необходимости, и вы можете передать имя (или полный путь) обратно в систему для обработки.

...