我有一个大文本文件(如1gb),我需要每40个字符插入换行符。
如何使用streamReader?
我尝试使用ReadBLock,但似乎无法使其工作。到目前为止,这是代码:
int index = 0;
try
{
using (StreamReader sr = new StreamReader(@"C:\bigfile.txt"))
{
char [] buf = new char [1024];
//sr.ReadBlock (buf, 0, 40);
while (sr.ReadBlock (buf, index, 40) != 0)
{
using (StreamWriter sw = new StreamWriter(@"C:\bigfilelinebreak.txt"))
{
//Console.WriteLine(buf);
sw.Write (buf);
sw.WriteLine(Environment.NewLine);
}
index += 40;
}
}
}
答案 0 :(得分:1)
您正在为每个ReadBlock创建一个新的StreamWriter
。 (我不知道new StreamWriter(@"filename")
的行为,但我会打赌这不是你想要发生的事情。此外,index
的{{1}}参数是目标数组的索引,而不是文件的索引。因此,对于每次读取,它应该为0。当您按顺序从一个流式传输到另一个时,您无需考虑文件中的位置。 StreamReader / Writer将相应地移动基础流。
ReadBlock
答案 1 :(得分:1)
有一些问题:
尝试以下方法:
try
{
using (StreamReader sr = new StreamReader(@"C:\bigfile.txt"))
{
using (StreamWriter sw = new StreamWriter(@"C:\bigfilelinebreak.txt"))
{
char [] buf = new char[40];
int read = sr.ReadBlock (buf, 0, 40);
while (read != 0)
{
sw.Write(buf, 0, read);
sw.WriteLine();
read = sr.ReadBlock (buf, 0, 40);
}
}
}
}
答案 2 :(得分:0)
目前,您正在重写每一行上的输出文件。这显然不是一个好计划。
我怀疑你想要这样的东西:
using (TextReader reader = File.OpenText(@"c:\bigfile.txt"))
{
using (TextWriter writer = File.CreateText(@"C:\bigfilelinebreak.txt"))
{
char[] buffer = new char[40];
int charsRead;
while ((charsRead = reader.ReadBlock(reader, buffer, buffer.Length)) > 0)
{
writer.Write(buffer, 0, charsRead);
writer.WriteLine();
}
}
}