如何用C#将文件夹文件导出至CSV并区分JPG、PDF及其他类型
C# 导出文件夹文件信息到CSV并标注文件类型
当然有简便的实现方式,核心是结合.NET的文件操作API和CSV格式规则来完成,以下是完整的解决方案:
核心思路
- 遍历目标文件夹(可选递归子文件夹)获取所有文件
- 通过扩展名判断文件类型(JPG/PDF/其他)
- 处理CSV格式的特殊字符(比如文件名含逗号的情况)
- 将收集到的文件信息写入CSV文件
完整代码示例
using System; using System.IO; using System.Linq; class FileInfoExporter { static void Main(string[] args) { // 配置参数 string targetFolder = @"C:\Your\Target\Directory"; string outputCsv = @"C:\Your\Output\FileInfo.csv"; bool includeSubfolders = true; // 初始化CSV表头 var csvContent = new[] { "文件名,文件路径,大小(字节),创建时间,文件类型" }; // 遍历文件并收集信息 var files = Directory.EnumerateFiles(targetFolder, "*.*", includeSubfolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly) .Select(path => new FileInfo(path)); foreach (var file in files) { // 判定文件类型 string fileType = file.Extension.ToLowerInvariant() switch { ".jpg" or ".jpeg" => "JPG", ".pdf" => "PDF", _ => "其他" }; // 转义CSV字段,避免格式错误 string safeFileName = EscapeCsvField(file.Name); string safeFilePath = EscapeCsvField(file.FullName); // 拼接行数据 string line = $"{safeFileName},{safeFilePath},{file.Length},{file.CreationTime:yyyy-MM-dd HH:mm:ss},{fileType}"; csvContent = csvContent.Append(line).ToArray(); } // 写入CSV文件 File.WriteAllLines(outputCsv, csvContent); Console.WriteLine($"导出完成,文件路径:{outputCsv}"); } /// <summary> /// 处理CSV字段中的特殊字符 /// </summary> private static string EscapeCsvField(string field) { if (field.Contains(',') || field.Contains('"')) { return $"\"{field.Replace("\"", "\"\"")}\""; } return field; } }
关键细节说明
- 文件遍历:使用
Directory.EnumerateFiles而非GetFiles,前者是延迟加载,处理大量文件时内存占用更低 - 类型判断:用
ToLowerInvariant避免大小写问题,同时支持.jpg和.jpeg两种扩展名 - CSV格式兼容:
EscapeCsvField方法处理含逗号、引号的字段,符合CSV规范 - 可配置项:通过
includeSubfolders开关控制是否遍历子文件夹,时间格式统一为yyyy-MM-dd HH:mm:ss便于读取
注意事项
- 替换代码中的
targetFolder和outputCsv为实际路径 - 确保程序拥有目标文件夹的读取权限和输出路径的写入权限
- 如果需要扩展更多文件类型,直接在switch表达式中添加对应的扩展名即可
内容的提问来源于stack exchange,提问作者user19788626
相关产品推荐
相关产品推荐

