如何使用C#判断目录中的项是文件还是文件夹?
C# 判断目录项是文件还是文件夹的正确写法
你原代码里的问题在于IsInstanceOfType的用法错误——这个方法需要传入对象实例,而非类型本身,所以不能直接传FileInfo或DirectoryInfo。下面是几种正确的实现方式:
方法一:使用模式匹配(推荐,C# 7.0+)
这是最简洁直观的写法,既能判断类型,又能直接获取强类型变量:
DirectoryInfo dirPrograms = new DirectoryInfo(folderPath); foreach(var item in dirPrograms.EnumerateFileSystemInfos()) { if (item is FileInfo fileInfo) { // 处理文件逻辑,可直接使用fileInfo操作 // 示例:Console.WriteLine($"找到文件:{fileInfo.FullName}"); } else if (item is DirectoryInfo dirInfo) { // 处理文件夹逻辑,可直接使用dirInfo操作 // 示例:Console.WriteLine($"找到文件夹:{dirInfo.FullName}"); } }
方法二:使用as关键字结合null判断
适合不需要模式匹配的场景,转换失败会返回null:
DirectoryInfo dirPrograms = new DirectoryInfo(folderPath); foreach(var item in dirPrograms.EnumerateFileSystemInfos()) { FileInfo fileInfo = item as FileInfo; if (fileInfo != null) { // 处理文件 continue; } DirectoryInfo dirInfo = item as DirectoryInfo; if (dirInfo != null) { // 处理文件夹 } }
方法三:直接比较类型(不推荐)
这种方式仅判断精确类型,若存在继承自FileInfo/DirectoryInfo的子类会判断失败,仅在确定无子类场景下使用:
DirectoryInfo dirPrograms = new DirectoryInfo(folderPath); foreach(var item in dirPrograms.EnumerateFileSystemInfos()) { if (item.GetType() == typeof(FileInfo)) { // 处理文件 } else if (item.GetType() == typeof(DirectoryInfo)) { // 处理文件夹 } }
内容的提问来源于stack exchange,提问作者Soumya
相关产品推荐
相关产品推荐

