如何将XDocument的XML内容保存为.xml文件?

6
我有一个XDocument类,其中包含已经制作好的XML内容。 我基本上想打开一个SaveFileDialog,让用户选择一个文件夹(而不是文件)来将内容保存为.xml文件。
但我在做这个过程中遇到了一些困难:
a) 如何使用SaveFileDialog提示用户选择文件夹?我只能使用它来让用户选择文件。
b) 如何从SaveFileDialog中提取所选路径?
c) 一旦我有了路径,如何保存XDocument的内容?有一个名为Save的方法需要一个流 - 我如何使用路径构建流?(这可能是一个基础问题,我几乎没有IO经验)

1
你在同一个问题中询问了太多的事情。请将其拆分为两个问题。一个关于SaveFileDialog,另一个关于保存XDocument。 - Anders Abel
3个回答

6

a) 您不想选择文件夹,而是要选择文件名(Save*File*Dialog)。

b) SaveFileDialog.FileName

c) 查看不同的重载:您有XDocument.Save(string fileName)。不需要使用流,可以使用文件名(噢,您在SaveFileDialog中获得了它)。

编辑:您的意思是用户无法更改文件名吗?那么

a) FolderBrowserDialog

b) FolderBrowserDialog.SelectedPath

c) XDocument.Save(Path.Combine(FolderBrowserDialog.SelectedPath, "无法更改的文件名"))

(编辑2:c)中Path.Combine更加优雅。)


3

A & B(重复问题的示例代码):

C(最小化代码以保存XDocument):

XDocument document = new XDocument();
document.Add(new XElement("my_root"));
// Save(): there are 6 overloads; the 2nd one takes a path
document.Save(filePathFromSaveDialog); 

0
请确保您将SaveFileDialog添加到您的窗体并签名为FileOk事件(可以通过SaveFileDialog的属性完成),然后以下代码应该适用于您:
private void button1_Click(object sender, EventArgs e)
{
    // When user clicks button, show the dialog.
    saveFileDialog1.ShowDialog();
}

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
    // Get file name.
    string name = saveFileDialog1.FileName;
    // Write to the file name selected.
    xDocumentYouHave.Save(name);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接