我有一个包含一些文本的大文件,我想把它分割成更小的文件。
在这个例子中,我所做的是:
下面是我函数中应该这样做的代码。ideea (我不知道的是)是如何关闭,并打开一个新的文件,一旦它已经达到300限制(在我们这里的例子)。
让我告诉你我在说什么:
int nr = 1;
package=textBox1.Text;//how many lines/file (small file)
string packnr = nr.ToString();
string filer=package+"Pack-"+packnr+"+_"+date2+".txt";//name of small file/s
int packtester = 0;
int package= 300;
StreamReader freader = new StreamReader("bigfile.txt");
StreamWriter pak = new StreamWriter(filer);
while ((line = freader.ReadLine()) != null)
{
if (packtester < package)
{
pak.WriteLine(line);//writing line to small file
packtester++;//increasing the lines of small file
}
else if (packtester == package)//in this example, checking if the lines
//written, got to 300
{
packtester = 0;
pak.Close();//closing the file
nr++;//nr++ -> just for file name to be Pack-2;
packnr = nr.ToString();
StreamWriter pak = new StreamWriter(package + "Pack-" + packnr + "+_" + date2 + ".txt");
}
}我知道这些错误:
不能在声明局部变量'pak‘之前使用它
不能在此范围内声明名为“pak”的局部变量,因为它将赋予“pak”一个不同的含义,而pak已经在“父或当前”作用域中用于表示其他内容。
发布于 2012-06-24 13:05:49
试试这个:
public void SplitFile()
{
int nr = 1;
int package = 300;
DateTime date2 = DateTime.Now;
int packtester = 0;
using (var freader = new StreamReader("bigfile.txt"))
{
StreamWriter pak = null;
try
{
pak = new StreamWriter(GetPackFilename(package, nr, date2), false);
string line;
while ((line = freader.ReadLine()) != null)
{
if (packtester < package)
{
pak.WriteLine(line); //writing line to small file
packtester++; //increasing the lines of small file
}
else
{
pak.Flush();
pak.Close(); //closing the file
packtester = 0;
nr++; //nr++ -> just for file name to be Pack-2;
pak = new StreamWriter(GetPackFilename(package, nr, date2), false);
}
}
}
finally
{
if(pak != null)
{
pak.Dispose();
}
}
}
}
private string GetPackFilename(int package, int nr, DateTime date2)
{
return string.Format("{0}Pack-{1}+_{2}.txt", package, nr, date2);
}发布于 2012-06-24 12:49:49
这段代码看起来像是关闭了流,当你点击300行时重新打开一个新的流。在这段代码中,到底什么东西不起作用?
您需要添加的一件事是最后一次关闭(可能需要检查,这样它就不会试图关闭已经关闭的流),以防您没有300行的偶数。
编辑:
由于你的编辑,我看到了你的问题。您不需要在最后一行代码中重新声明pak,只需将其重新初始化到另一个流编写器。(我不记得那是否是一次性的,但如果是的话,你可能应该在做新的之前这样做)。
StreamWriter pak = new StreamWriter(package + "Pack-" + packnr + "+_" + date2 + ".txt");变成了
pak = new StreamWriter(package + "Pack-" + packnr + "+_" + date2 + ".txt");发布于 2012-06-24 12:55:49
对数旋转可以自动为您完成此操作。它已经投入了很多年,人们信任它来处理他们有时非常大的very服务器日志。
https://stackoverflow.com/questions/11177489
复制相似问题