我正试图在Parallel.Foreach循环中将单独的集合写入单独的csv。当我运行这个时,出现以下错误:使用StreamWriter写入Parallel.Foreach中的不同文件
该进程无法访问文件'C:\ temp \ OCRProcess \ 2011 \ 49 \ OCRProcess-2011-49.csv',因为它正在被另一个进程。
当我看着所有的工作进程,他们打开不同的文件,他们都没有使用相同的文件位置。从我所知道的来看,每个线程(工作进程)都没有冲突。
public void GenerateCSVFile(List<CSVFile> csvFiles)
{
Parallel.ForEach(csvFiles, (csvfile, state, index) =>
{
var fileLocation = _storageLocation + csvfile.Type + s + csvfile.Year + s + csvfile.Day + s + csvfile.Type + "-" +
csvfile.Year + "-" + csvfile.Day + ".csv";
if (!File.Exists(fileLocation))
{
File.Create(fileLocation);
}
using (var streamWriter = new StreamWriter(fileLocation))
{
foreach (var csvRecord in csvfile.CSVRecords)
{
streamWriter.WriteLine(csvRecord.Object_Id + "," + csvRecord.DocumentName + "," + csvRecord.BCI_DCN + "," + csvRecord.CreationDate);
}
}
});
}
以下是CSVFile和CSVRecord类的含义。
public sealed class CSVRecord
{
public String BCI_DCN { get; set; }
public String Object_Id { get; set; }
public String DocumentName { get; set; }
public String CreationDate { get; set; }
}
public sealed class CSVFile
{
public List<CSVRecord> CSVRecords { get; set; }
public String Year { get; set; }
public String Type { get; set; }
public String Day { get; set; }
public CSVFile()
{
CSVRecords = new List<CSVRecord>();
}
}
是否有可能您的清单中有重复的csv文件 csvFiles? –
Jason
我看过列表 csvFiles,没有重复。 –
munchrall
问题是否总是出现在同一个文件中? – Jason