2013-06-18 4 views
-5

Я хотел бы создать метод, который возвращает мне самый новый созданный файл в Каталоге в C# с предпочтительным использованием Справочника .GetFiles() в пространстве имен System.IO. Возможно, это возможно и без LINQ, чтобы он совместим с NET 2.0. Хорошо бы также, если FilePath может быть возвращен как строка не как объект файла, если это возможно Конструкция должна выглядеть так, как показано ниже, но как я могу видеть только новейший файл?Как получить новейший созданный файл в каталоге, используя только GetFiles в пространстве имен System.IO в C#

public static string NewestFileofDirectory(string DirectoryName) 
{ 
foreach(string File in Directory.GetFiles(DirectoryName)) 
{ 
    if(new FileInfo(File).CreationDate > ???) //here I stuck 
    { 
    //interesting what would be here... 
    } 
} 
} 

ответ

3

Вы можете сделать это с помощью FileInfo и DirectoryInfo классов. Сначала вы получите все файлы в указанном каталоге, а затем сравните их LastWriteTime с другими, и, таким образом, вы можете получить самый последний файл или новый файл. Here is код для этого метода.

/// <summary> 
/// Returns recently written File from the specified directory. 
/// If the directory does not exist or doesn't contain any file, null is returned. 
/// </summary> 
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param> 
/// <returns></returns> 
public static string NewestFileofDirectory(string directoryPath) 
{ 
    DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath); 
    if (directoryInfo == null || !directoryInfo.Exists) 
     return null; 

    FileInfo[] files = directoryInfo.GetFiles(); 
    DateTime recentWrite = DateTime.MinValue; 
    FileInfo recentFile = null; 

    foreach (FileInfo file in files) 
    { 
     if (file.LastWriteTime > recentWrite) 
     { 
      recentWrite = file.LastWriteTime; 
      recentFile = file; 
     } 
     } 
     return recentFile.Name; 
} 
+0

Какая ошибка? –

+0

@feedwall Да, эта ошибка возникает, потому что я возвращаю объект FileInfo, а не имя файла. –

+0

@feedwall Проверьте мой ответ, я теперь вернул имя файла как 'return recentFile.Name;', теперь он будет компилироваться просто отлично. –

3

Boilerplate поиск приход прямо вверх. Слава богу за LINQ :)

+0

добавить «using System.IO;» это работало? Этот метод существует в .Net 2.0 (согласно MSDN), так что это не проблема. – Vivek

+1

@feedwall 'dirName' - это просто фиктивная переменная, которую он использует, чтобы представлять то, что вы вызывали имя вашего каталога. Думаю, в вашем случае это будет 'directoryPath'. Попытайтесь понять, что делает код. – jszigeti

+0

Это будет 'theFile'. ['var'] (http://msdn.microsoft.com/en-us/library/bb383973.aspx) просто означает, что тип переменной определяется компилятором. Было бы так, как если бы он сказал 'string', но многие люди склонны принимать ярлык' var', когда они не делают ничего особенного с переменной. – jszigeti