没有覆盖,是否可以从文本文件中删除字符串?

时间:2016-04-08 07:49:33

标签: c# asp.net string text streamwriter

我试图在文本文件中添加一行,但先删除封闭括号。

以下是我的文本文件数据格式的样子

{
"1455494402": 8,
 "1456272000": 2,
 "1456358400": 1}

现在,当我追加文本文件时,数据应该如下所示

{
"1455494402": 8,
 "1456272000": 2,
 "1456358400": 1,
 "1454716800": 1,
 "1454803200": 4,
 "1454889600": 7,
 "1458345600": 17,
 "1458518400": 1 }

我认为有两种方法可以做到这一点,

  • 用新数据覆盖整个文件(负担权限?性能命中)
  • 或者只是附加最新数据(似乎很快但不能删除最后一个括号

我认为,第一种选择并不那么聪明。

第二个选项很酷但如何在添加最新数据之前删除最后一个括号,我不能用新数据替换}吗?

到目前为止,我的研究告诉我,再次写入文件是唯一更好的选择,你也这么认为吗?不能追加(在某种意义上删除括号并附加

编辑:请不要认为这是重复的,我愿意知道第二个选项是否可行?但是我知道我可以使用上面详细信息中提到的第一个选项

1 个答案:

答案 0 :(得分:2)

假设:

  • 知道在文件末尾会有一个大括号(或任何其他编码为单个字节的字符),
  • 该文件写为UTF8

然后你可以覆盖最后一个字符,如下所示:

string filename = "test.txt";
File.WriteAllText(filename, "{One\nTwo\nThree}"); // Note curly brace at the end.

using (var file = new StreamWriter(File.OpenWrite(filename)))
{
    file.BaseStream.Position = file.BaseStream.Length - 1;
    file.Write("\nfour}"); // New line at end, previous brace is replaced.
}

然而,这非常脆弱。如果最后一个字符碰巧是一个以多个字节编码的字符,那么这将不起作用。

除非文件非常大并且您已经制定了时间表明值得引入这些脆弱的代码以加快速度,否则您不值得抓住机会。

请注意,通过更改传递给StreamWriter()构造函数的编码,也可以修改此代码以使用ASCII或ANSI文件。