在我的情况下,我有五个巨大的文本文件,我必须嵌入到一个文本文件中.
我尝试使用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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个新答案很像Martin的方法,除了:
原始答案
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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这会逐行读取,以避免一次读入太多内存.如果您乐意将每个文件完全读入内存(仍然是一次一个),您可以更简单:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4735 次 |
| 最近记录: |