StreamWriter не смывает - PullRequest
       31

StreamWriter не смывает

0 голосов
/ 06 апреля 2019

Я хочу написать файл около 10 миллионов строк. Я использую StreamWriter с оператором using, однако кажется, что StreamWriter не сбрасывается. Вот мой код:

public void ExportRecords(IEnumerable<Record> records, string path)
    {
        using(TextWriter writer = new StreamWriter(path))
        {
            writer.WriteLine("header");

            foreach(var record in records)
            {
                string line = "";
                //Fill line with record properties
                writer.WriteLine(line);
            }
        }
    }

В определенной строке StreamWriter не добавляет никаких строк. Так в чем же проблема?

EDIT

Как уже упоминалось в комментариях, код запускается асинхронно.

Вот как это делается:

Task.Run(() =>
{
    if (!String.IsNullOrEmpty(folderPath))
    {
        var records = _generator.GenerateData();

        _dataService.ExportRecords(records, $"{folderPath}/RECORDS.csv");
        //Just a message box
        _reporter.ReportMessage($"Generation and exportation finished");
    }
    else
    {
        IsGenerating = false;
        _reporter.ReportMessage("No output file was created");
    }

});

Так что я поставил точку останова, чтобы проверить, начинает ли метод выполняться, и он это делает. Я просто указываю, что код не застрял в методе генерации.

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Временно измените тип вашего приложения на Консольное приложение (если это приложение для Windows) и добавьте немного Console.WriteLine в стратегических точках, чтобы вы могли получить некоторую обратную связь о ходе выполнения процедуры. Еще лучше, если бы вы могли добавить протоколирование в ваше приложение, используя такую ​​библиотеку, как log4net или Serilog . Это будет полезно и на этапе разработки приложения, а не только на этапе разработки / отладки.

0 голосов
/ 06 апреля 2019

Flush() должен вызываться вручную в какой-то момент, если вам это нужно в середине операции, в противном случае поток будет очищен только в конце оператора, когда он удаляется.

...