我有一个包含文件子文件夹的文件夹。我想通过修改时间获取最新的文件名。有没有一种更有效的方法来找到每个文件夹和文件的循环以找到它?
答案 0 :(得分:3)
取决于你想要怎么做。你想要软件启动然后查找它还是继续运行并跟踪它?
在最后一种情况下,可以使用FileSystemWatcher类。
答案 1 :(得分:2)
使用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)
答案 2 :(得分:1)
使用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);
答案 3 :(得分:1)
如果你喜欢Linq,你可以使用linq来反对以你想要的方式查询你的文件系统。给出一个样本here,您可以在4行代码中玩游戏并获得您想要的内容。确保您的应用对文件夹具有适当的访问权限。
答案 4 :(得分:0)
如果安装了PowerShell,则命令为
dir -r | select Name, LastWriteTime | sort LastWriteTime -DESC | select -first 1
这样,脚本可以根据需要运行,您可以将Name(或完整路径)传递回系统进行处理。
答案 5 :(得分:0)
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);
}