【问题标题】:How do i replace/overwrite the text in text file for updating information ? Not append text如何替换/覆盖文本文件中的文本以更新信息?不附加文字
【发布时间】:2013-12-10 06:39:51
【问题描述】:

这是现在的代码:

using (StreamWriter sw = File.CreateText(file))
                {
                    sw.WriteLine("Image Width: " + imageWidth.ToString());
                    sw.WriteLine("Image Height: " + imageHeight.ToString());
                    sw.WriteLine("Original Factor: " + originalFactor.ToString());
                    sw.WriteLine("Current Factor: " + currentFactor.ToString() + Environment.NewLine);
                    for (int i = 0; i < points.Count; i++)
                    {
                        sw.WriteLine("Coordinate " + i + ": " + points[i].ToString());
                    }
                }
            }
            using (StreamWriter sw = File.AppendText(file))
            {

            }

如果我将使用 AppendText,它将添加新行。 我想要的是,如果我更改了 originalFactor 的图像宽度,那么它将在最初写入的同一行中更新它的值。

例如,如果点列表有 12 个索引(点),现在我添加了更多点,而列表现在有 20 个点,所以将这些点附加到现有的点上,不要覆盖它们,而是添加新的点。

我想更改/更新它的所有前 4 行的值,并且只有要附加的点列表。

在 form1 中,我有一个按钮单击事件,它在新类中调用 Save 方法,我将值写入文本文件。

编辑**

对于点列表问题,我确实使用了 AppendText:

using (StreamWriter sw = File.AppendText(file))
            {
                for (int i = 0; i < points.Count; i++)
                {
                    sw.WriteLine("Coordinate " + i + ": " + points[i].ToString());
                }
            }

但我想每次检查 points.Count 是否更新我的意思是当我单击按钮再次保存时,我不希望它每次都附加相同的点列表,只有当列表的计数变大时那么上次是什么。

我该怎么做?

【问题讨论】:

标签: c# winforms


【解决方案1】:

最简单的方法可能是用新文件覆盖整个文件。

如果您确实不需要这样做,那么您可以使用流的Position 属性或Seek 方法将新数据放入旧数据所在文件的同一部分。然后你还有另一个问题要解决,如果新数据占用的字节数与旧数据不同,则必须移动更改数据后出现的所有字节以解决此问题。例如,假设您的原始文件是这样的:

...
Current Factor: 9
Coordinate 1: (1, 1)
...

现在你想把它改成这样:

...
Current Factor: 10
Coordinate 1: (1, 1)
...

如果“坐标”一词过去从文件的第 100 个字节开始,您必须将它(以及它之后的所有内容)移动到文件的第 101 个或第 102 个字节开始(取决于您正在使用的文本编码),然后再写入新的“当前因子”值。另外不要忘记,您必须移动出现在“坐标”一词之前的 CRLF。

同样,如果您将值从“10”更改为“9”,则必须将文件中该数字之后的所有内容移动一到两个字节,并且还必须将文件的长度减少一两个。

我见过的大多数应用程序并没有解决这些问题,而是写一个新文件,替换需要替换的行,然后删除旧文件并将新文件移动到原始文件名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多