c# - 如何读取多个文本文件并将其保存到一个文本文件中?

标签 c# text file

就我而言,我有五个巨大的文本文件,我必须将它们嵌入到一个文本文件中。

我尝试使用StreamReader(),但我不知道如何使它读取另一个文件,我是否必须分配另一个变量?

展示一个例子将不胜感激。

最佳答案

新答案

(请参阅下面有关原始答案的说明。)

static void CopyFiles(string dest, params string[] sources)
{
    using (TextWriter writer = File.CreateText(dest))
    {
        // Somewhat arbitrary limit, but it won't go on the large object heap
        char[] buffer = new char[16 * 1024]; 
        foreach (string source in sources)
        {
            using (TextReader reader = File.OpenText(source))
            {
                int charsRead;
                while ((charsRead = reader.Read(buffer, 0, buffer.Length)) > 0)
                {
                    writer.Write(buffer, 0, charsRead);
                }
            }
        }
    }
}


这个新答案很像马丁的方法,除了:


它读入一个较小的缓冲区。 16K在几乎所有情况下都是可以接受的,并且不会在大型对象堆(不会被压缩)上结束
它读取文本数据而不是二进制数据,原因有两个:


可以轻松地修改代码,以从一种编码转换为另一种编码
如果每个输入文件都包含一个字节序标记,那么阅读器将跳过该字节序,而不是以在输入文件边界分散在输出文件中的字节序标记结尾



原始答案

Martin Stettner在下面的答案中指出了一个问题-如果第一个文件结束时没有换行符,它将在输出文件中仍然创建换行符。同样,它将换行符转换为“ \ r \ n”,即使以前只是“ \ r”或“ \ n”也是如此。最后,毫无疑问地冒了长时间使用大量数据的风险。

就像是:

static void CopyFiles(string dest, params string[] sources)
{
    using (TextWriter writer = File.CreateText(dest))
    {
        foreach (string source in sources)
        {
            using (TextReader reader = File.OpenText(source))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    writer.WriteLine(line);
                }
            }
        }
    }
}


请注意,这是逐行读取的,以避免一次读入过多的内存。如果您愿意将每个文件完全读入内存(一次仍是一个),则可以使其更简单:

static void CopyFiles(string dest, params string[] sources)
{
    using (TextWriter writer = File.CreateText(dest))
    {
        foreach (string source in sources)
        {
            string text = File.ReadAllText(source);
            writer.Write(text);
        }
    }
}

关于c# - 如何读取多个文本文件并将其保存到一个文本文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/884884/

相关文章:

c# - ASP.NET MVC 中的自动递增 ID

c# - 如何在 Visual C# 中获取数组中第二大的数字?

python - 在文件中查找给定单词的字谜

linux - 如何将2个文件中的字符串合并为1个并用空格分隔?

vb.net - 如何在VB.net中指定相对文件路径

c++ - 键入 'File' 到键入 'std::string'

c# - 语法识别 unlimited '{' expr '}' next to each-other

c# - DataGridView 列显示虽然标记为不可见

file - 尝试将大文件推送到服务器时出现 Mercurial 客户端错误 255 和 HTTP 错误 404

html - 谁能告诉我如何在 Python 上提取和显示图像中的文本