-4

我想创建一个方法,该方法返回 C# 目录中最新创建的文件,并首选 System.IO 命名空间中的 Directory.GetFiles() 方法。也许在没有 LINQ 的情况下也可以做到这一点,以使其与 NET 2.0 兼容。如果可能的话,如果 FilePath 可以作为字符串而不是作为文件对象返回,那也很好构造应该如下所示,但我如何才能看到最新的文件?

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...
  }
 }
}
4

3 回答 3

4

样板搜索即将推出。感谢上帝的 LINQ :)

var minTime = DateTime.MinValue;

string theFile = null;

foreach (var entry in Directory.GetFiles(dirName))
{
    if (File.GetCreationTimeUtc(entry) > minTime)
    {
        minTime = File.GetCreationTimeUtc(entry);
        theFile = entry;
    }
}
于 2013-06-18T18:09:34.863 回答
3

您可以使用FileInfoDirectoryInfo类来做到这一点。您将首先获取指定目录中的所有文件,然后将它们的LastWriteTime与其他文件进行比较,因此通过比较您可以获得最近写入或最近的文件。这是此方法的代码。

 /// <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;
 }
于 2013-06-18T18:04:13.290 回答
0

以上两个答案都有空目录的问题。这是一个检查空目录和不存在目录的混合答案。

    /// <summary>
    /// Returns most recently written Filename 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>
    /// <param name="filePattern">Search Pattern for file</param>
    /// <returns></returns>
    public static string NewestFileInDirectory(string directoryPath, string filePattern)
    {
        DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);
        if (directoryInfo == null || !directoryInfo.Exists)
        {
            return null;
        }

        var minTime = DateTime.MinValue;

        string newestFile = null;

        foreach (var file in Directory.GetFiles(directoryPath, filePattern))
        {
            var fileLastWriteTime = File.GetLastWriteTimeUtc(file);
            if (fileLastWriteTime > minTime)
            {
                minTime = fileLastWriteTime;
                newestFile = file;
            }
        }
        return newestFile;
    }
于 2021-10-22T17:49:40.150 回答