如何删除文件中的所有行,然后在Compact Framework 3.5中重写该文件c#

时间:2015-07-07 19:58:32

标签: c# .net compact-framework windows-ce streamwriter

在使用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();

2 个答案:

答案 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行)。如果这种情况经常发生(每隔几秒钟),这可能会磨损我们的闪光灯,快速达到其最大擦除周期数(很快可能意味着几周或几个月)。 另一种方法是在旧日志文件达到最大大小时重命名(删除任何具有相同名称的现有文件)并创建一个新文件。 在这种情况下,您的日志信息将分为两个文件,但您始终会附加到现有文件,从而限制您执行的写入次数。从闪存文件系统的角度来看,重命名或删除文件也不是繁重的操作。