如何获取目录内文件夹的最后修改日期?现有代码需改造
修改VB.NET代码以获取目录下所有文件夹的最后修改日期
我现有一段代码,可读取指定目录下的所有文件并获取其中最新的修改日期。请问能否修改这段代码,使其获取该目录下所有文件夹的最后修改日期而非文件?代码如下:
Dim chkPath = "C:\CheckFolders" Dim directory As New System.IO.DirectoryInfo(chkPath) Dim File As System.IO.FileInfo() = directory.GetFiles() Dim File1 As System.IO.FileInfo Dim LastModified As String For Each File1 In File LastModified = System.IO.File.GetLastWriteTime(chkPath & "\" & File1.Name).ToShortDateString() Next MsgBox(LastModified)
当然可以!只需要把代码里获取文件的逻辑换成获取文件夹就行,我帮你调整了代码,还优化了一些细节:
修改后的代码
Dim chkPath = "C:\CheckFolders" Dim directory As New System.IO.DirectoryInfo(chkPath) ' 替换GetFiles()为GetDirectories(),获取当前目录下的所有子文件夹 Dim folders As System.IO.DirectoryInfo() = directory.GetDirectories() Dim folder As System.IO.DirectoryInfo Dim lastModified As String = "" ' 初始化变量避免空值问题 For Each folder In folders ' 直接用DirectoryInfo的LastWriteTime属性,不用再拼接路径调用File方法 lastModified = folder.LastWriteTime.ToShortDateString() ' 如果需要逐个弹出每个文件夹的修改日期,可以把MsgBox放在循环里 ' MsgBox($"文件夹 {folder.Name} 的最后修改日期:{lastModified}") Next ' 这里会显示最后一个文件夹的修改日期,如果要找最新的那个,看下面的扩展 MsgBox(lastModified)
关键改动说明
- 把
directory.GetFiles()换成directory.GetDirectories(),这样就会获取目标目录下的所有子文件夹,而非文件 - 变量名从
File/File1改成folders/folder,语义更清晰,避免和System.IO.File类重名混淆 - 直接使用
DirectoryInfo的LastWriteTime属性,比原来拼接路径调用File.GetLastWriteTime更简洁安全,还能避免路径拼接的错误 - 初始化了
lastModified变量,防止循环未执行时弹出空值
扩展:获取所有文件夹中最新的修改日期
如果你想要的不是逐个获取,而是找出所有文件夹里修改时间最新的那个,可以这样改:
Dim chkPath = "C:\CheckFolders" Dim directory As New System.IO.DirectoryInfo(chkPath) Dim folders As System.IO.DirectoryInfo() = directory.GetDirectories() If folders.Length > 0 Then ' 用LINQ找出LastWriteTime最大的文件夹 Dim newestFolder = folders.OrderByDescending(Function(f) f.LastWriteTime).First() MsgBox($"最新修改的文件夹是 {newestFolder.Name},修改日期:{newestFolder.LastWriteTime.ToShortDateString()}") Else MsgBox("该目录下没有子文件夹") End If
注意:使用LINQ的话,需要在代码文件顶部添加Imports System.Linq引用哦。
内容的提问来源于stack exchange,提问作者S.T
相关产品推荐
相关产品推荐

