Я пытаюсь найти наиболее разумный способ открыть файл, изменить его содержимое и затем записать его обратно в файл.Перезаписать файл, но все еще читать содержимое
Если у меня есть следующий "MyFile.xml"
<?xml version="1.0" encoding="utf-8"?>
<node>
<data>this is my data which is long</data>
</node>
А затем хотите изменить его в соответствии с этим:
private static void Main(string[] args)
{
using (FileStream stream = new FileStream("Myfile.xml", FileMode.Open))
{
XDocument doc = XDocument.Load(stream);
doc.Descendants("data").First().Value = "less data";
stream.Position = 0;
doc.Save(stream);
}
}
я получаю следующий результат. Обратите внимание: поскольку общая длина файла меньше, чем до того, как я получаю неверные данные в конце.
<?xml version="1.0" encoding="utf-8"?>
<node>
<data>less data</data>
</node>/node>
Я предполагаю, что я мог бы использовать File.ReadAll*
и File.WriteAll*
, но это будет означать два отверстия файла. Разве нет способа сказать «Я хочу открыть этот файл, прочитать его данные и когда я сохраню удаление старого контента», не закрывая и не открывая файл? Другие найденные мной решения включают FileMode.Truncate
, но это означает, что я не могу прочитать контент.
Помогает ли этот метод: http://msdn.microsoft.com/en-us/library/system.io.filestream.setlength.aspx? – Vitaliy
дубликат http://stackoverflow.com/questions/8464261/filestream-and-streamwriter-how-to-truncate-the-remainder-of-the-file-after-wr? – Lanorkin