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