我创建了一个程序,它能够通过datagridview修改.exe.config文件(app config)的内容,并在datagridview上显示键值对.问题是,我有一个保存设置,它将旧值替换为用户键入的新值.它保存,下次打开它时,文件将被覆盖,但当我尝试加载配置文件以更新用户设置已更改为时,我得到“另一个进程使用的文件”错误.
这是代码:
private XmlDocument m_XmlDoc; private FileStream fIn; private StreamReader sr; private StreamWriter sw; private OrderedDictionary m_Settings; private void ProgramConfig_Load(object sender,EventArgs e) { try { loadconfigfile(GatewayConfiguration.Properties.Settings.Default.Config); BindingList<keyvalueType> list = new BindingList<keyvalueType>(); for (index = 0; index < m_Settings.Count; index++) { list.Add(new keyvalueType(keys[index],values[index].ToString())); } var source = new BindingSource(); source.DataSource = list; dataGridView1.DataSource = source; } catch (Exception ex) { textBox1.Text = ex.Message; } } public void loadconfigfile(string configfile) { if (File.Exists(configfile)) { m_XmlDoc = new XmlDocument(); GatewayConfiguration.Properties.Settings.Default.Config = configfile; GatewayConfiguration.Properties.Settings.Default.Save(); // Error Occurs here at the fIn,telling me that the file is currently in use and cannot be accessed. fIn = new FileStream(configfile,FileMode.Open,FileAccess.ReadWrite); sr = new StreamReader(fIn); sw = new StreamWriter(fIn); try { m_XmlDoc.LoadXml(sr.ReadToEnd()); loadAppSettings(); } catch (Exception ex) { throw ex; } } else { throw new FileNotFoundException(configfile + " does not exist."); } } private void loadAppSettings() { m_Settings = new OrderedDictionary(); XmlNodeList nl = m_XmlDoc.GetElementsByTagName("setting"); foreach (XmlNode node in nl) { try { m_Settings.Add(node.Attributes["name"].Value,node.ChildNodes[0].InnerText); } catch (Exception) { } } } private void SaveAppSettings_Click(object sender,EventArgs e) { // saves MessageBoxButtons buttons = MessageBoxButtons.YesNo; DialogResult result = MessageBox.Show("Overwrite the old values with the new values?","Save Settings?",buttons); if (result == DialogResult.No) { return; } int index = 0; string[] keys = new string[m_Settings.Keys.Count]; m_Settings.Keys.copyTo(keys,0); for (index = 0; index < dataGridView1.Rows.Count; index++) { if ((string)dataGridView1[2,index].Value != string.Empty) { setAppSetting(keys[index],(string)dataGridView1[2,index].Value); } } // Updates datagrid by loading configfile again loadconfigfile(GatewayConfiguration.Properties.Settings.Default.Config); textBox1.Text = "Settings Saved. You may Now exit."; m_savecounter++; dataGridView1.Update(); dataGridView1.Refresh(); }
该错误发生在SaveAppSettings下的loadconfigfile函数中.它告诉我它无法访问该文件,因为该文件由另一个进程使用.在我再次打开文件并将其显示给用户之前,我还需要做些什么吗?
非常感谢,
Tf.rz
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。