Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 为什么StreamWriter添加了一个额外的空行,而File.writeAlline没有?_C#_.net_File Io_Streaming_Streamwriter - Fatal编程技术网

C# 为什么StreamWriter添加了一个额外的空行,而File.writeAlline没有?

C# 为什么StreamWriter添加了一个额外的空行,而File.writeAlline没有?,c#,.net,file-io,streaming,streamwriter,C#,.net,File Io,Streaming,Streamwriter,我最初使用File.writeAllines将大量记录写入本地文本文件。此列表设置为展开,因此为了避免任何内存问题,我决定遵循中给出的建议。下面是我目前使用的修改过的代码 using (FileStream destFile = new FileStream( destinationFilePath, FileMode.Create, FileAccess.Write)) { using (

我最初使用File.writeAllines将大量记录写入本地文本文件。此列表设置为展开,因此为了避免任何内存问题,我决定遵循中给出的建议。下面是我目前使用的修改过的代码

  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)而创建的文件在每条记录之间包含一个不需要的空行,尽管输出的数据是正确的。最初,我将与foreach循环一起使用,并将每条记录添加到一个通用集合中。然后,我使用File.writeAllines将记录输出到指定的文件,并且记录的格式为,它们之间没有空行(所需的结果

为了解决这个问题(而不是使用writer.WriteLineAsync),我尝试使用

writer.WriteAsync
但所有文本都输出到一行

我研究了stackoverflow以寻求一些建议,并发现了一些建议使用

writer.NewLine ="\n\r" or writer.NewLine ="\r"

不幸的是,这并没有解决问题。在此问题上,如有任何帮助或建议,将不胜感激。提前感谢。

这是因为:

charsRead = await data.ReadAsync(buffer, 0, buffer.Length);
await writer.WriteLineAsync(buffer, 0, charsRead);
每当
charsRead
0
时,您仍然会写一行。换成

charsRead = await data.ReadAsync(buffer, 0, buffer.Length);
if (charsRead > 0)
    await writer.WriteLineAsync(buffer, 0, charsRead);
或者,如果要为每条记录写入一行,请将其更改为:

do
{
    charsRead = await data.ReadAsync(buffer, 0, buffer.Length);
    if (charsRead > 0)
        await writer.WriteAsync(buffer, 0, charsRead);
}
while (charsRead > 0);
await writer.WriteLineAsync(buffer, 0, 0);

@约翰马克:我很高兴为你工作。您可能希望通过勾选此答案旁边的复选标记将其作为答案,以便将您的问题从“未回答的问题”列表中删除。提到