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

时间:2012-04-07 19:25:51

标签: c# xml io linq-to-xml

我有一个XDocument类,其中已经创建了XML内容。我基本上想要打开一个SaveFileDialog,让用户选择一个文件夹(不是文件),将内容保存为.xml文件。

我遇到了一些困难:

a)如何使用SaveFileDialog提示用户选择文件夹?我只能用它来让用户选择一个文件。

b)如何从SaveFileDialog中提取所选路径?

c)一旦我有了路径,我该如何保存XDocument的内容?有一个名为Save的方法需要一个Stream - 如何使用路径构建流? (这可能是一个基本问题,我几乎没有IO经验)

3 个答案:

答案 0 :(得分:4)

a)您不想选择文件夹,而是选择文件名(保存* 文件 *对话框)

b)SaveFileDialog.FileName

c)查看不同的重载:你有XDocument.Save(string fileName)。不需要有流,你可以有一个fileName(哦,你在SaveFileDialog中得到它)

编辑:您的意思是用户无法更改文件的名称? 然后

a)FolderBrowserDialog

b)FolderBrowserDialog.SelectedPath

c)XDocument.Save(FolderBrowserDialog.SelectedPath +“/”+ THENAMEOFYOURFILETHATUSERCANTCHANGE)

编辑2 :C中的Path.Combine更优雅))。

答案 1 :(得分:1)

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); 

答案 2 :(得分: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);
}