Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CsvHelper不';无法按预期写入文件_C#_Csvhelper - Fatal编程技术网

C# CsvHelper不';无法按预期写入文件

C# CsvHelper不';无法按预期写入文件,c#,csvhelper,C#,Csvhelper,下面是我正在使用的代码,我希望在循环的每次迭代过程中,每一行都会写入文件。我发现,如果我使用ctrl-c提前结束程序,或者只是关闭窗口,那么文件是空的 我需要经常写入文件,我有33k项要添加到文件中,在33k项添加到CsvWriter之前,几乎不可避免地会出现一些错误。如果我将循环短路到20项,然后让它完成,则输出文件是正确的。我如何解决这个问题 int i = 0; IList<string> pcodes = FindAutobidPcodes(); using (StreamW

下面是我正在使用的代码,我希望在循环的每次迭代过程中,每一行都会写入文件。我发现,如果我使用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; }
    }
}
inti=0;
IList pcodes=FindAutobidPcodes();
使用(StreamWriter sw=newstreamwriter($“HPH_目录{DateTime.Now.Ticks}.csv”))
使用(CsvWriter cw=新的CsvWriter(sw,CultureInfo.InvariantCulture))
{
cw.Configuration.RegisterClassMap();
foreach(pcodes中的字符串代码)
{
字符串搜索=$“&search=%7b\'catalog\%3a\'{catalog}\%2c\'text\%3a%7b\'{code}\%3a\{code}\%7d%7d”;
Query=$“{RandomString()}{limit}{page}{search}{gtemplate}&token={token}”;
WebPage WebPage=QueryProductData(searchQuery.ToString());
cw.WriteRecord(Product.ParseJSON(网页));
cw.NextRecord();
i++;
如果(i==20){return;}
}
}

您可以在每次迭代后刷新StreamWriter,例如:

    static void Main(string[] args)
    {
        using (StreamWriter sw = new StreamWriter($"HPH_Catalog_{DateTime.Now.Ticks}.csv"))
        using (CsvWriter cw = new CsvWriter(sw, CultureInfo.InvariantCulture))
        {
            for (int i = 0; i < 34000; i++)
            {
                cw.WriteField(i);
                cw.NextRecord();

                sw.Flush();
                System.Threading.Thread.Sleep(100);
            }
        }
    }
static void Main(字符串[]args)
{
使用(StreamWriter sw=newstreamwriter($“HPH_目录{DateTime.Now.Ticks}.csv”))
使用(CsvWriter cw=新的CsvWriter(sw,CultureInfo.InvariantCulture))
{
对于(int i=0;i<34000;i++)
{
cw.WriteField(i);
cw.NextRecord();
sw.Flush();
系统线程线程睡眠(100);
}
}
}

您还可以将每个循环的内部foor封装到try语句中-如果循环时出现问题,则在catch语句中刷新和处置。

我不确定,但您可以创建一个单独的文件并继续复制。我不使用CsvWriter,只需使用StreamWriter写入,并确保使用flush()每次写入后,so结果将进入文件。