Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用序列化xml保存文件_C#_Xml_Wpf_File_Save - Fatal编程技术网

C# 如何使用序列化xml保存文件

C# 如何使用序列化xml保存文件,c#,xml,wpf,file,save,C#,Xml,Wpf,File,Save,我试图用一个按钮从数据网格中保存一个文件,但我不知道如何让它保存,用户可以选择保存的位置。在代码上也有一些问题 private void Button_Click_4(object sender, RoutedEventArgs e) { var path = @"C:\\Users\\Tiago\\Documents\\Teste\\Save.xml"; if (serializableObject == null) { return;

我试图用一个按钮从数据网格中保存一个文件,但我不知道如何让它保存,用户可以选择保存的位置。在代码上也有一些问题

    private void Button_Click_4(object sender, RoutedEventArgs e)
    {
        var path = @"C:\\Users\\Tiago\\Documents\\Teste\\Save.xml";

            if (serializableObject == null) { return; }

            try
            {
                XmlDocument xmlDocument = new XmlDocument();
                XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
                using (MemoryStream stream = new MemoryStream())
                {
                    serializer.Serialize(stream, serializableObject);
                    stream.Position = 0;
                    xmlDocument.Load(stream);
                    xmlDocument.Save(path);
                    stream.Close();
                }
            }
            catch (Exception ex)
            {

            }


    }

这就是我现在得到的。

如果您想允许用户选择文件的位置和名称,您可以使用SaveFileDialog选项

以下是一些可以帮助您完成此任务的链接:



使用(FileStream fs=new FileStream(path,FileMode.Create)
缺少一个
首先,在代码末尾缺少一个
大括号。这可能会解决一些问题

其次,确保您的
序列化对象
可通过
按钮点击事件访问。将
serializableObject
设置为访问它的字段或属性

要选择保存位置请使用
文件保存对话框
为用户提供保存位置的选择

创建一个:

var fileSaveDialog = new FileSaveDialog();
然后展示:

fileSaveDialog.ShowDialog();
然后,您可以使用单击“保存”时
FileSaveDialog
对象提供的文件名

这是一个字符串-将
path
变量设置为该字符串

像这样:

var path = fileSaveDialog.FileName;
有关使用
FileSaveDialog
的良好教程,请参阅

示例:(在
按钮中使用此按钮\u单击\u 4
事件处理程序)

希望这有帮助

编辑:
不要忘记使用Microsoft.Win32使用
位于代码顶部

另一次编辑:
我已经更新了代码,将
结果
分配为
System.Windows.Forms.DialogResult
以比较
result==DialogResult.OK


请参阅:

要选择保存位置,您可以使用
System.Windows.Forms.FolderBrowserDialog
。但这是一个WinForm库,因此需要将
System.Windows.Forms
添加到项目引用中

var dialog = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = dialog.ShowDialog();

错误是什么?“}”无效的表达式项和serializableObject在当前上下文中不存在您的代码末尾缺少一个关闭的
}
:)尝试此链接也可以使用
SaveFileDialog
类来选择直接文件路径。这将只提供一个文件夹路径。确保将文件名附加到文件夹路径字符串的末尾。需要使用Microsoft.Win32包含
在代码顶部完成,但现在有问题serializableObject@Tiago如果这是错误,请标记这是答案。:)错误仍然存在xD,但你解决了其中一个问题@CologlerI不明白你在说什么/问什么..?当我保存并关闭程序时,我保存它的文件不在那里这是因为你的
FileStream fs
对象正在锁定该文件。由于
XmlDocument.Save
方法正在将其保存到磁盘,因此不需要在
try{}catch{}
块周围包装
using(FileStream fs=new…
语句。它无法执行此操作,因为您的
fs
当前正在使用该文件。请单步执行调试器(在显示
saveFileDialog
的位置放置一个断点)。查看
结果是什么
,并查看
保存对话框.FileName
是否在中具有正确的值,并且在将文件与其余代码一起保存之前,该值是否已分配给您的
路径:)结果为空
var dialog = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = dialog.ShowDialog();