我有一个很大的文本文件(如1 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;
}
}
}发布于 2011-11-22 00:45:25
有几个问题:
尝试以下操作:
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);
}
}
}
}发布于 2011-11-22 00:45:07
您正在为每个ReadBlock创建一个新的StreamWriter。(我不知道new StreamWriter(@"filename")的行为,但我打赌这不是你希望发生的事情)。此外,ReadBlock的index参数是目标数组的索引,而不是文件的索引。因此,对于每次读取,它都应该为0。您不需要考虑文件中的位置,因为您是按顺序从一个流到另一个流。StreamReader/Writer将相应地移动底层流。
char [] buf = new char [40];
int amtRead;
using (StreamReader sr = new StreamReader(@"C:\bigfile.txt"))
using (StreamWriter sw = new StreamWriter(@"C:\bigfilelinebreak.txt"))
while ((amtRead = sr.ReadBlock (buf, 0, 40)) != 0)
{
sw.WriteLine (buf, 0, amtRead);
}发布于 2011-11-22 00:47:43
目前,您正在重写每一行的输出文件。这显然不是一个好计划。
我怀疑你想要这样的东西:
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();
}
}
}https://stackoverflow.com/questions/8215197
复制相似问题