【问题标题】:How can I save the XML contents of an XDocument as an .xml file?如何将 XDocument 的 XML 内容保存为 .xml 文件?
【发布时间】:2012-04-07 19:25:51
【问题描述】:

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

我在这样做时遇到了一些困难:

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

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

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

【问题讨论】:

  • 你在同一个问题中问了太多东西。把它分成两个问题。一个关于 SaveFileDialog,一个用于保存 XDocument。

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


【解决方案1】:

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

b) SaveFileDialog.FileName

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

编辑:您的意思是用户不能更改文件名? 那么

a) 文件夹浏览器对话框

b) FolderBrowserDialog.SelectedPath

c) XDocument.Save(FolderBrowserDialog.SelectedPath + "/" + THENAMEOFYOURFILETHATUSERCANTCHANGE)

(EDIT 2 : Path.Combine 在 c) 中更优雅)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      确保您将 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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-18
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        相关资源
        最近更新 更多