Мне нужно открыть только XML-файл, внести изменения и сохранить его.
Я могу открыть его и довольно легко сделать модификацию, например:
DataSet ds = new DataSet();
ds.ReadXml(filename);
DataTable table = ds.Tables[0];
DataRow[] rows = table.Select("Inventory== 1");
DataRow row = rows[0];
row["Inventory"] = "2";
ds.WriteXml(filename);
Это все прекрасно работает, но не блокирует файл. Мне абсолютно необходим файл заблокирован.
Итак, я попробовал это с потоком:
FileStream stream = File.Open(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
DataSet ds = new DataSet();
ds.ReadXml(stream);
DataTable table = ds.Tables[0];
DataRow[] rows = table.Select("Inventory== 1");
DataRow row = rows[0];
row["Inventory"] = "2";
ds.WriteXml(stream);
stream.Close();
Это открывает файл исключительно, но когда он сохраняет, он добавляет XML к концу времени, он не перезаписывает его, поэтому я получаю что-то вроде:
<Widgets>
<Widget Code="5" Number="10" Inventory="1" />
<Widget Code="6" Number="11" Inventory="15" />
<Widget Code="7" Number="12" Inventory="22" />
</Widgets>
<Widgets>
<Widget Code="5" Number="10" Inventory="2" />
<Widget Code="6" Number="11" Inventory="15" />
<Widget Code="7" Number="12" Inventory="22" />
</Widgets>
То, что я хочу, это:
<Widgets>
<Widget Code="5" Number="10" Inventory="2" />
<Widget Code="6" Number="11" Inventory="15" />
<Widget Code="7" Number="12" Inventory="22" />
</Widgets>
Я знаю, что могу открыть файл и использовать методы File, чтобы построчно анализировать его и вносить изменения ... но я надеялся на что-то более элегантное. Первый метод - загрузка файла с использованием ReadXml - делает изменение файла просто отлично, но у него, похоже, нет никаких вариантов для открытия файла исключительно. Я что-то упустил?