Я использую этот код ниже, чтобы прочитать .xml-файл &, перевести данные на 4 флажка. Но им получить ошибкуКак закрыть XML FileStream
«Процесс не может получить доступ к файлу: CXXXX Поскольку его использования другого процесс»
Я думал, что это может быть потому, что чтение или запись, но закрыто и как вы можете видеть, код ниже. Есть идеи?
private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists("data.xml"))
{
XmlSerializer xs = new XmlSerializer(typeof(Information));
FileStream read = new FileStream("data.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
Information info = (Information)xs.Deserialize(read);
data1.Text = info.Data1;
data2.Text = info.Data2;
data4.Text = info.Data3;
data4.Text = info.Data4;
read.Close();
}
}
// this class to write the data into xml file
class SaveXML
{
public static void SaveData(object obj, string filename)
{
XmlSerializer sr = new XmlSerializer(obj.GetType());
TextWriter writer = new StreamWriter(filename);
sr.Serialize(writer, obj);
writer.Close();
}
}
// using this to update the .xml file with new data when textchanged
private void data1_TextChanged(object sender, EventArgs e)
{
try
{
Information info = new Information();
info.Data1 = data1.Text;
SaveXML.SaveData(info, "data.xml");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Я не вижу ничего плохого в вашем коде, поэтому, возможно, в каком-то другом процессе файл открыт? Основываясь на своих знаниях о своей среде, знаете ли вы о возможных кандидатах на процессы, которые могут быть открыты? –
Вы должны обернуть поток файлов в ['using' statement] (https://msdn.microsoft.com/en-us/library/system.io.filestream%28v=vs.110%29.aspx). См. [Using Statement (C# Reference)] (https://msdn.microsoft.com/en-us/library/yh598w02.aspx). Возможно, файл остался открытым, потому что было выбрано исключение. – dbc
Я согласен с @ 1800INFORMATION. Но я бы предложил закрыть поток как можно скорее ... сразу после десериализации. –