Проблемы с сохранением XML файла (C#) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь создать файл конфигурации из файла XML, но не могу понять, как сохранить файл после добавления в него. Я могу читать из файла нормально, поэтому я знаю, что это не проблема, где он находится, но я все еще не знаю, как его сохранить.

Я осматривался около 2 часов и не могу понять проблему. Я знаю, как обходить c#, но совершенно не знаком с XML.

public async Task CreateReaction(string name, DiscordMessage message, DiscordEmoji emoji, DiscordRole role)
{
    string path = @"E:\Visual Studio\repos\JustHangoutBot\bin\Debug\netcoreapp1.1\configs\reactions.xml";
    XDocument doc = XDocument.Load(path);

    await message.CreateReactionAsync(emoji);

    XElement root = new XElement(name);
    root.Add(new XElement("MessageID", message.Id));
    root.Add(new XElement("ReactionID", emoji.Id));
    root.Add(new XElement("RoleID", role.Id));
    doc.Element("Reactions").Add(root);

    byte[] byteArray = Encoding.UTF8.GetBytes(path);
    MemoryStream stream = new MemoryStream(byteArray);
    doc.Save(stream);
}

Я думаю, что проблема где-то в последних трех строках. Я видел учебные пособия о том, как люди сохраняют файл, используя, например, doc.Save("reactions.xml"), но я получаю ошибку, когда не могу преобразовать строку в поток.

Любая помощь будет принята с благодарностью. Заранее спасибо!

1 Ответ

1 голос
/ 14 апреля 2020

Это будет сделано:

using (var fileStream = System.IO.File.OpenWrite("path to the file you want to write"))
{
    doc.Save(fileStream);
}

Когда вы сделаете это:

byte[] byteArray = Encoding.UTF8.GetBytes(path);
MemoryStream stream = new MemoryStream(byteArray);
doc.Save(stream);

То, что происходит,

  • Вы открываете файл в path и считывание его в байтовый массив.
  • Вы создаете MemoryStream, в котором эти байты имеют содержимое
  • Вы сохраняете этот документ в MemoryStream.

Под капотом MemoryStream - это просто массив байтов в памяти. Поэтому он записывает файл в память, а не в файл.

File.OpenWrite(path) открывает FileStream с указанным путем. Если файл не существует, он его создает. Если файл существует, он будет перезаписан.

Поэтому, когда вы звоните doc.Save(fileStream), вы пишете в файл.

...