gpt4 book ai didi

c# - 如何从目录中的文件夹中获取最新的文件名

转载 作者:行者123 更新时间:2023-11-30 22:01:00 44 4
gpt4 key购买 nike

Ans:这是使用 C# 代码从文件夹中获取最新文件名的一种解决方案

调用函数如下:

FileInfo newestFile = GetNewestFile(new DirectoryInfo(@"D:\DatabaseFiles"));

功能:

public static FileInfo GetNewestFile(DirectoryInfo directory)
{
return directory.GetFiles()
.Union(directory.GetDirectories().Select(d => GetNewestFile(d)))
.OrderByDescending(f => (f == null ? DateTime.MinValue : f.LastWriteTime))
.FirstOrDefault();
}

现在我的问题是有人请告诉我从文件夹中获取最新文件名的替代方法吗?

最佳答案

为了找到列表中最大的项目而进行整个排序是极其低效的。

您最好使用“MaxBy()”Linq 扩展之一来查找最大值,例如 MoreLinq one from Jon Skeet and others . (完整的图书馆是 here 。)

如果您使用 MaxBy(),代码可能如下所示:

public static FileInfo GetNewestFile(DirectoryInfo directory)
{
return directory.GetFiles()
.Union(directory.GetDirectories().Select(d => GetNewestFile(d)))
.MaxBy(f => (f == null ? DateTime.MinValue : f.LastWriteTime));
}

理想情况下,您可以将此与其他建议的答案结合起来(即使用 Directory.EnumerateFiles() 的重载,它会为您执行递归)。

这是一个完整的控制台应用示例。 “MaxBy()”方法来源于旧版本的 MoreLinq,并进行了一些修改:

using System;
using System.Collections.Generic;
using System.IO;

namespace Demo
{
public static class Program
{
private static void Main()
{
string root = "D:\\Test"; // Put your test root here.

var di = new DirectoryInfo(root);
var newest = GetNewestFile(di);

Console.WriteLine("Newest file = {0}, last written on {1}", newest.FullName, newest.LastWriteTime);
}

public static FileInfo GetNewestFile(DirectoryInfo directory)
{
return directory.EnumerateFiles("*.*", SearchOption.AllDirectories)
.MaxBy(f => (f == null ? DateTime.MinValue : f.LastWriteTime));
}
}

public static class EnumerableMaxMinExt
{
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector)
{
return source.MaxBy(selector, Comparer<TKey>.Default);
}

public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector, IComparer<TKey> comparer)
{
using (IEnumerator<TSource> sourceIterator = source.GetEnumerator())
{
if (!sourceIterator.MoveNext())
{
throw new InvalidOperationException("Sequence was empty");
}

TSource max = sourceIterator.Current;
TKey maxKey = selector(max);

while (sourceIterator.MoveNext())
{
TSource candidate = sourceIterator.Current;
TKey candidateProjected = selector(candidate);

if (comparer.Compare(candidateProjected, maxKey) > 0)
{
max = candidate;
maxKey = candidateProjected;
}
}

return max;
}
}
}
}

关于c# - 如何从目录中的文件夹中获取最新的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28108101/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com