C# 遍历文件夹下所有子文件,读取文件名称和路径,输出到EXCEL中,过程用进度条读取
时间: 2024-10-13 08:04:52 浏览: 31
在C#中,遍历文件夹并读取其内容然后写入Excel通常会涉及`DirectoryInfo`, `FileInfo`, 和 `Microsoft.Office.Interop.Excel`等命名空间。以下是概述的一个基本步骤:
1. 引入所需库:
```csharp
using System.IO;
using System.Linq;
using Microsoft.Office.Interop.Excel;
```
2. 定义目录路径、工作表和进度条:
```csharp
string dirPath = @"C:\YourFolderPath"; // 替换为你需要遍历的文件夹路径
Excel.Application excelApp = new Excel.Application();
Workbook workbook = excelApp.Workbooks.Add();
Worksheet worksheet = workbook.ActiveSheet;
IProgress<int> progress = new Progress<int>(percent => Console.WriteLine($"进度: {percent}%"));
```
3. 使用递归函数遍历文件夹:
```csharp
private void TraverseFolder(string path, int currentStep)
{
var directoryInfo = new DirectoryInfo(path);
foreach (var fileInfo in directoryInfo.GetFiles())
{
worksheet.Cells[currentStep + 1, 1] = fileInfo.FullName; // 文件路径
worksheet.Cells[currentStep + 1, 2] = fileInfo.Name; // 文件名
// 提高代码复用,你可以选择将这个插入操作放到一个单独的方法中
InsertRow(worksheet, currentStep + 1);
++currentStep;
progress.Report(currentStep / directoryInfo.GetFiles().Length * 100); // 更新进度
}
if (directoryInfo.GetDirectories().Any())
{
TraverseFolder(directoryInfo.FullName, currentStep);
}
}
```
4. 插入行方法(假设你需要自定义插入行的动作):
```csharp
private void InsertRow(Worksheet ws, int row)
{
ws.Rows[row].Height = 15; // 可调整行高度
ws.Cells[row, 1].AutoFitColumn(); // 自动调整列宽
}
```
5. 开始遍历并处理结束:
```csharp
TraverseFolder(dirPath, 1);
excelApp.Visible = true; // 显示Excel应用程序(如果需要)
progress.Report(100);
```
6. 关闭资源:
```csharp
excelApp.Quit();
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excelApp);
```
阅读全文