C# - 随机写入文件 - 在第一行之前写入第二行

时间:2011-04-17 10:05:55

标签: c# file-io filestream random-access

我正在尝试使用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

由于

3 个答案:

答案 0 :(得分:4)

首先需要搜索等于第一个字符串长度的文件。

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

另外,不要忘记丢弃您的信息流(using)。

答案 1 :(得分:3)

您无法插入文件并推送现有内容。您只能覆盖或扩展。

因此,在知道文件之前的所有内容之前,你不能写一段文件。

答案 2 :(得分:2)

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

  1. 使用“第二个”内容创建临时文件
  2. 使用“第一个”内容
  3. 创建一个新文件
  4. 打开第一个文件,阅读其内容并附加到第二个文件
  5. 如果这是一个更大的解决方案中反复出现的要求,也许你想要的是某种数据库?也许是基于文件的数据库,如SqlLiteBerkeleyDb

    讨论了类似的问题here