Я изначально использовал File.WriteAllLines, чтобы выписать большой список записей в локальный текстовый файл. Этот список настроен на расширение, поэтому, чтобы избежать проблем с памятью, я решил следовать рекомендациям, приведенным в SqlClient Streaming Support MSDN Article. Измененный код, который я использую в настоящее время, приведен ниже.Почему StreamWriter добавляет лишнюю пустую строку, а File.WriteAllLine - нет?
using (FileStream destFile = new FileStream(
destinationFilePath, FileMode.Create, FileAccess.Write))
{
using (SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess))
{
using (StreamWriter writer = new StreamWriter(destFile))
{
while (await reader.ReadAsync())
{
char[] buffer = new char[4096];
int charsRead = 0;
using (TextReader data = reader.GetTextReader(0))
{
do
{
charsRead = await data.ReadAsync(buffer, 0, buffer.Length);
await writer.WriteLineAsync(buffer, 0, charsRead);
}
while (charsRead > 0);
}
}
}
}
}
Файл, который создается в результате выполнения этого кода (с использованием writer.WriteLineAsync) включает в себя нежелательную пустую строку между каждой записью, несмотря на то, выводятся данные верны. Первоначально я использовал SqlQuery method вместе с циклом foreach и добавил каждую запись в общую коллекцию. Затем я использовал File.WriteAllLines для вывода записей в указанный файл, а записи были отформатированы без пустых строк между ними (желаемый результат).
, чтобы попытаться решить эту проблему (вместо использования writer.WriteLineAsync), я тогда пытался использовать
writer.WriteAsync
но весь текст был выведен в один ряд.
Я исследовал StackOverflow некоторые советы и наткнулся на сообщения, предполагающие использование
writer.NewLine ="\n\r" or writer.NewLine ="\r"
это, к сожалению, не решить эту проблему. Любая помощь или совет будут высоко оценены по этому вопросу. Заранее спасибо.
Спасибо много Алекс. теперь работает. –
@JohnMack Я рад, что сработал для вас. Вы можете принять его как ответ, установив галочку рядом с этим ответом, чтобы разрешить удаление вашего вопроса из списка «неотвеченные вопросы». См. [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers) – Alex