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

How to remove all lines in a file, then rewrite the file in Compact Framework 3.5 c#

在使用 Windows Forms 应用程序的 .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();

您的代码

foreach (char line2 in allines)
{
    writer.WriteLine(line2);
}

正在写出原始文件的 个字符每个单独一行

请记住,allines 是一个字符串,恰好在文件的原始字符串之间有 Environment.NewLine。

您可能打算做的只是

writer.WriteLine(allines);

更新

您多次关闭 openFile(您应该只执行一次),但您没有刷新或关闭您的 writer。

尝试

using (var writer = new StreamWriter(fullFileName, false)) //Don't append!
{
    writer.WriteLine(allines);
}

确保 writer 被处理并因此被刷新。

如果您打算这样做,以便为日志文件提供类似 "rotating" 缓冲区的东西,请考虑大多数 Windows CE 设备使用闪存作为存储介质,您的方法将生成完整的重新每次写入整个文件(整个 - 4 行)。如果这种情况经常发生(每隔几秒),这可能会磨损我们的闪存,很快达到其最大擦除周期数(很快可能意味着几周或几个月)。 另一种方法是在旧日志文件达到最大大小时重命名它(删除任何现有的同名文件)并创建一个新文件。 在这种情况下,您的日志记录信息将拆分为两个文件,但您将始终附加到现有文件,从而限制您执行的写入次数。从闪存文件系统的角度来看,重命名或删除文件也不是繁重的操作。