在使用Windows窗体应用程序的.net框架中,我可以清除文件,然后将我想要的数据写入该文件。
以下是我在Windows窗体中使用的代码:
var openFile = File.OpenText(fullFileName);
var fileEmpty = openFile.ReadLine();
if (fileEmpty != null)
{
var lines = File.ReadAllLines(fullFileName).Skip(4); //Will skip the first 4 then rewrite the file
openFile.Close();//Close the reading of the file
File.WriteAllLines(fullFileName, lines); //Reopen the file to write the lines
openFile.Close();//Close the rewriting of the file
}
openFile.Close();
openFile.Dispose();
我正在尝试将紧凑框架做同样的事情。我可以保留我想要的行,然后删除文件中的所有行。但是我无法重写该文件。
这是我的紧凑框架代码:
var sb = new StringBuilder();
using (var sr = new StreamReader(fullFileName))
{
// read the first 4 lines but do nothing with them; basically, skip them
for (int i = 0; i < 4; i++)
sr.ReadLine();
string line1;
while ((line1 = sr.ReadLine()) != null)
{
sb.AppendLine(line1);
}
}
string allines = sb.ToString();
openFile.Close();//Close the reading of the file
openFile.Dispose();
//Reopen the file to write the lines
var writer = new StreamWriter(fullFileName, false); //Don't append!
foreach (char line2 in allines)
{
writer.WriteLine(line2);
}
openFile.Close();//Close the rewriting of the file
}
openFile.Close();
openFile.Dispose();
答案 0 :(得分:1)
您的代码
foreach (char line2 in allines)
{
writer.WriteLine(line2);
}
正在写出原始文件的字符,各自在另一行。
请记住,allines
是一个单独的字符串,恰好在文件的原始字符串之间有Environment.NewLine。
您可能打算做的只是
writer.WriteLine(allines);
<强>更新强>
您正在多次关闭openFile(您应该只执行一次),但您不会刷新或关闭您的作者。
尝试
using (var writer = new StreamWriter(fullFileName, false)) //Don't append!
{
writer.WriteLine(allines);
}
确保作者被处理并因此被冲洗。
答案 1 :(得分:0)
如果您打算这样做,那就像&#34;旋转&#34;对于日志文件的缓冲区,请考虑大多数Windows CE设备使用闪存作为存储介质,并且您的方法将每次生成完整的重写文件(整个 - 4行)。如果这种情况经常发生(每隔几秒钟),这可能会磨损我们的闪光灯,快速达到其最大擦除周期数(很快可能意味着几周或几个月)。 另一种方法是在旧日志文件达到最大大小时重命名(删除任何具有相同名称的现有文件)并创建一个新文件。 在这种情况下,您的日志信息将分为两个文件,但您始终会附加到现有文件,从而限制您执行的写入次数。从闪存文件系统的角度来看,重命名或删除文件也不是繁重的操作。