我正在尝试使用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
由于
答案 0 :(得分:4)
首先需要搜索等于第一个字符串长度的文件。
fs.Seek(stringToWrite2.Length, SeekOrigin.Begin);
fs.Write(stringToWrite, 0, stringToWrite.Length);
fs.Seek(0, SeekOrigin.Begin);
另外,不要忘记丢弃您的信息流(using
)。
答案 1 :(得分:3)
您无法插入文件并推送现有内容。您只能覆盖或扩展。
因此,在知道文件之前的所有内容之前,你不能写一段文件。
答案 2 :(得分:2)
根据您要实现的目标,您可能需要写入两个不同的文件,一个是临时文件。
如果这是一个更大的解决方案中反复出现的要求,也许你想要的是某种数据库?也许是基于文件的数据库,如SqlLite或BerkeleyDb。
讨论了类似的问题here。