4

我正在尝试使用 FileStream 写入文件并希望写入第二行,然后写入第一行。我在写完第二行之后使用 Seek() 回到开头,然后写第一行。它取代了第二行(或部分取决于第一行的长度。)我如何不让它取代第二行?

        var fs = new FileStream("my.txt", FileMode.Create);
        byte[] stringToWrite = Encoding.UTF8.GetBytes("string that should be in the end");
        byte[] stringToWrite2 = Encoding.UTF8.GetBytes("first string\n");
        fs.Write(stringToWrite, 0, stringToWrite.Length);
        fs.Seek(0, SeekOrigin.Begin);
        fs.Write(stringToWrite2, 0, stringToWrite2.Length);

以下内容写入文件:

first string
hould be in the end

我希望它是

first string
string that should be in the end

谢谢

4

3 回答 3

4

您首先需要寻找等于第一个字符串长度的文件。

fs.Seek(stringToWrite2.Length, SeekOrigin.Begin);
fs.Write(stringToWrite, 0, stringToWrite.Length);
fs.Seek(0, SeekOrigin.Begin);

另外,不要忘记处理您的流 ( using)。

于 2011-04-17T10:08:12.337 回答
3

您不能插入文件并将现有内容回。您只能覆盖或扩展。

因此,在您知道文件之前所有内容的内容之前,您无法编写文件的一部分。

于 2011-04-17T10:14:33.257 回答
2

根据您要实现的目标,您可能需要写入两个不同的文件,一个是临时文件。

  1. 创建具有“第二个”内容的临时文件
  2. 使用“第一个”内容创建一个新文件
  3. 打开第一个文件,读取其内容并附加到第二个文件

如果这是一个更大的解决方案中反复出现的要求,也许您想要的是某种数据库?可能是基于文件的数据库,例如SqlLiteBerkeleyDb

这里讨论了一个类似的问题。

于 2011-04-17T10:19:17.323 回答