2
我有以下用於序列化標籤內容的代碼。當我按下「保存」按鈕時,會生成一個xml文件。當我在選擇相同的xml文件後按下「load」按鈕時,出現錯誤,IOexception未處理,進程無法訪問文件'C:\ datasaved.xml',因爲它正在被另一個進程使用。我的代碼有什麼問題嗎? 謝謝。XML序列化IOexception未處理
public class FormSaving
{
private string major;
public string Majorversion
{
get;
set;
}
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
string savepath;
SaveFileDialog DialogSave = new SaveFileDialog();
// Default file extension
DialogSave.DefaultExt = "txt";
// Available file extensions
DialogSave.Filter = "XML file (*.xml)|*.xml|All files (*.*)|*.*";
// Adds a extension if the user does not
DialogSave.AddExtension = true;
// Restores the selected directory, next time
DialogSave.RestoreDirectory = true;
// Dialog title
DialogSave.Title = "Where do you want to save the file?";
// Startup directory
DialogSave.InitialDirectory = @"C:/";
DialogSave.ShowDialog();
savepath = DialogSave.FileName;
DialogSave.Dispose();
DialogSave = null;
FormSaving abc = new FormSaving();
abc.Majorversion = MajorversionresultLabel.Content.ToString();
FileStream savestream = new FileStream(savepath, FileMode.Create);
XmlSerializer serializer = new XmlSerializer(typeof(FormSaving));
serializer.Serialize(savestream, abc);
}
private void LoadButton_Click(object sender, RoutedEventArgs e)
{
Stream checkStream = null;
Microsoft.Win32.OpenFileDialog DialogLoad = new Microsoft.Win32.OpenFileDialog();
DialogLoad.Multiselect = false;
DialogLoad.Filter = "XML file (*.xml)|*.xml|All files (*.*)|*.*";
if ((bool)DialogLoad.ShowDialog())
{
try
{
if ((checkStream = DialogLoad.OpenFile()) != null)
{
loadpath = DialogLoad.FileName;
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
else
{
System.Windows.MessageBox.Show("Problem occured, try again later");
}
FormSaving abc;
FileStream loadstream = new FileStream(loadpath, FileMode.Open);
XmlSerializer serializer = new XmlSerializer(typeof(FormSaving));
abc = (FormSaving)serializer.Deserialize(loadstream);
loadstream.Close();
MajorversionresultLabel.Content = abc.Majorversion;
}
你好jon飛碟,謝謝你的回覆。在對存儲和加載使用'using'語句之後,我仍然有同樣的問題。關於兩次開放流..我想知道它是否會工作,我只是有一個單一的流?比方說,用戶加載一個手動編輯的xml文件。編輯,對不起,我現在很困惑 – jeremychan 2011-02-23 07:40:08
@jeremychan:如果用戶目前在另一個進程中打開文件,它可能會失敗,是的。你在這裏是這種情況嗎? – 2011-02-23 07:41:39
對不起,我現在完全困惑..我該怎麼辦?我沒有很好的理解流 – jeremychan 2011-02-23 07:54:02