如何解决File.ReadLines 在读取文件后保持文件锁定,我无法写入文件
出于某种原因,File.ReadLines 使我正在读取的文件保持锁定状态,当我尝试使用 streamWriter 将文本写入其中时,我收到一个错误,表明它正被另一个进程使用。如果我不先阅读它,写入它就可以正常工作。这是我的代码:
IEnumerable<String> lines;
private void loadCfg()
{
lines = File.ReadLines(Application.StartupPath + @"\server.cfg");
foreach (var line in lines)
{
if (line.Contains("Port"))
{
portTxtBox.Text = extractValue(line);
}
if (line.Contains("Cars"))
{
maxCarsCombo.Text = extractValue(line);
}
if (line.Contains("MaxPlayers"))
{
maxPlayerCombo.Text = extractValue(line);
}
}
}
private void saveBtn_Click(object sender,EventArgs e)
{
StreamWriter sw = new StreamWriter(Application.StartupPath + @"\server.cfg",false);
sw.WriteLine(lines.ElementAt(0));
sw.Close();
}
解决方法
好吧,您应该使用 StreamReader
类读取所有行,这样您的文件将被正确关闭我改变了您读取行的方式以使用 StreamReader
读取所有行尝试以下版本
List<string> lines = new List<string>()
private void loadCfg()
{
string temp = null;
StreamReader rd = new StreamReader(Application.StartupPath + @"\server.cfg");
temp = rd.ReadLine();
while(temp != null)
{
lines.Add(temp);
temp = rd.ReadLine();
}
rd.Close();
foreach (var line in lines)
{
if (line.Contains("Port"))
{
portTxtBox.Text = extractValue(line);
}
if (line.Contains("Cars"))
{
maxCarsCombo.Text = extractValue(line);
}
if (line.Contains("MaxPlayers"))
{
maxPlayerCombo.Text = extractValue(line);
}
}
}
private void saveBtn_Click(object sender,EventArgs e)
{
StreamWriter sw = new StreamWriter(Application.StartupPath + @"\server.cfg",false);
sw.WriteLine(lines.ElementAt(0));
sw.Close();
}
我还没有测试过代码,但我相信它会解决你的问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。