ОБНОВЛЕНИЕ № 2 :
Я скомпилировал ваш образец как есть, и он отлично сработал Я протестировал его с помощью файла, созданного прямо из кода, а также с файлом xaml, созданным в Visual Studio. Похоже, файл, с которым вы работаете, поврежден или имеет проблему с кодировкой.
Насколько я знаю, вы ничего не можете сделать с поврежденным файлом, но что касается кодировки, вы можете указать это при чтении с помощью объекта StreamReader. Вы просто передаете нужную кодировку и ваш поток чтения в конструктор StreamReader. Также имеется возможность определять кодировку по меткам порядка байтов.
using (TextReader txtreader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.GetEncoding(1251 /*desired codepage here*/)))
{
document.Load(txtreader);
}
или
using (TextReader txtreader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), true /*tries to detect the encoding*/))
{
document.Load(txtreader);
}
Конечно, вы должны сохранить файл в той же кодировке, иначе у вас будут проблемы при следующем запуске кода загрузки.
Также я прилагаю код, который создает файл, если он не существует, или просто изменяет его, если он уже существует.
class Program
{
static readonly string path = @"C:\Users\Dmitry\Documents\test_3.xml";
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
test(path);
}
static void test(string path)
{
XmlDocument document = new XmlDocument();
if (File.Exists(path))
{
using (Stream readStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
document.Load(readStream);
}
}
else
{
document.AppendChild(document.CreateXmlDeclaration("1.0", "UTF-8", String.Empty));
document.AppendChild(document.CreateElement("Test"));
}
document.DocumentElement.AppendChild(document.CreateElement("Node"));
using (FileStream WRITER = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
{
document.Save(WRITER);
}
}
}
Надеюсь, это поможет вам.