如何修复 C# 中的 System.IO 异常。试图将多个 CSV 文件整理成 1 个文件

How to fix System.IO Exception in C#. Attempting to collate multiple CSV files into 1 file

我不断收到以下异常:

System.IO.IOException HResult=0x80070020 Message=The process cannot access the file 'C:\DIPV3\result.csv' because it is being used by another process.

是否有更好的方法结合使用 Streams 或 Linq 来尝试此解决方案?下面的代码部分写入文件,但随后抛出上述异常。

string sourceDir = @"C:\DIPV3";
string output = @"C:\DIPV3\result.csv";

//Thread.Sleep(5000);
File.WriteAllLines(output, 
    Directory.EnumerateFiles(sourceDir, @"*.csv").SelectMany(file => File.ReadLines(file)));

问题是您正试图写入您正在读取的同一个文件(您的 output 文件在 sourceDir 中并且匹配 "*.csv" 过滤器。

一些可能的解决方案是:

1。 Select所有文件除了输出文件供阅读:

File.WriteAllLines(output, Directory.EnumerateFiles(sourceDir, @"*.csv")
    .Where(path => !path.Equals(output, StringComparison.OrdinalIgnoreCase))
    .SelectMany(File.ReadLines));

2。将输出文件放在不同的文件夹中:

string output = @"C:\DIPV3\restuls\result.csv";

3。先读取所有内容,再写入结果:

IEnumerable<string> contents = Directory.EnumerateFiles(sourceDir, @"*.csv")
    .SelectMany(File.ReadLines).ToList();

File.WriteAllLines(output, contents);