【发布时间】:2020-07-19 13:11:27
【问题描述】:
下面是我正在使用的代码,我希望在循环的每次迭代期间每一行都会写入文件。我发现如果我使用 ctrl-c 提前结束程序或只是关闭窗口,则文件为空。
我需要经常写入文件,我有 33k 项要添加到文件中,在将 33k 项添加到 CsvWriter 之前几乎不可避免地会出现问题。如果我将循环短路到 20 个项目并让它完成,则输出文件是正确的。我该如何解决这个问题?
int i = 0;
IList<string> pcodes = FindAutobidPcodes();
using (StreamWriter sw = new StreamWriter($"HPH_Catalog_{DateTime.Now.Ticks}.csv"))
using (CsvWriter cw = new CsvWriter(sw, CultureInfo.InvariantCulture))
{
cw.Configuration.RegisterClassMap<ProductMap>();
foreach (string code in pcodes)
{
string search = $"&search=%7b\"catalog\"%3a\"{catalog}\"%2c\"text\"%3a%7b\"{code}\"%3a\"{code}\"%7d%7d";
searchQuery.Query = $"{RandomString()}{limit}{page}{search}{gtemplate}&token={token}";
WebPage webPage = QueryProductData(searchQuery.ToString());
cw.WriteRecord(Product.ParseJSON(webPage));
cw.NextRecord();
i++;
if(i == 20) { return; }
}
}
【问题讨论】:
-
我不确定,但您可以创建一个单独的文件并继续复制
-
我不能使用 CsvWriter,只使用 StreamWriter 写入,并确保在每次写入后使用 Flush(),以便将结果放入文件中。