如何获取倒数第二个文件夹?C#目录操作技术求助
解决方案
核心思路
- 一次性获取目标路径下的所有文件夹并按
LastWriteTimeUtc倒序排序,避免重复读取目录提升性能 - 通过排序后的集合直接取第1个元素(索引0)作为最后修改的文件夹,第2个元素(索引1)作为倒数第二个修改的文件夹
- 先判断文件夹数量是否≥2,防止索引越界异常
修正后的代码
var targetDir = new DirectoryInfo(textBoxPath.Text); var sortedFolders = targetDir.GetDirectories() .OrderByDescending(d => d.LastWriteTimeUtc) .ToList(); // 初始化变量 DirectoryInfo lastWrittenFolder = null; DirectoryInfo writtenFolderBeforeLast = null; string lastGif = null; string secondLastGif = null; // 检查文件夹数量并获取最后一个文件夹的gif if (sortedFolders.Count >= 1) { lastWrittenFolder = sortedFolders[0]; var lastFolderGifs = Directory.GetFiles(lastWrittenFolder.FullName, "*.gif"); if (lastFolderGifs.Length > 0) { lastGif = lastFolderGifs.Last(); } } // 检查文件夹数量≥2时,获取倒数第二个文件夹的gif if (sortedFolders.Count >= 2) { writtenFolderBeforeLast = sortedFolders[1]; var secondLastFolderGifs = Directory.GetFiles(writtenFolderBeforeLast.FullName, "*.gif"); if (secondLastFolderGifs.Length > 0) { secondLastGif = secondLastFolderGifs.Last(); } } // 后续可根据变量是否为null处理不存在的情况,比如: // if (lastGif != null) { /* 执行逻辑 */ }
代码说明
- 用
ToList()缓存排序后的目录集合,避免多次LINQ查询重复读取文件系统 - 分别判断文件夹数量和每个文件夹内gif文件的数量,避免空集合调用
Last()引发异常 - 变量名按需求替换为
writtenFolderBeforeLast,语义更清晰 - 拆分文件获取逻辑,增加空值检查,提升代码健壮性
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

