试图从文本文件中删除一行时出现异常.我怎么解决它?
本文关键字:异常 解决 一行 文件 文本 删除 | 更新日期: 2023-09-27 17:51:26
在form1的顶部:
StreamWriter recentfiles;
string[] lines;
string line = null;
int line_number = 0;
string RecentFiles = "";
在构造函数中:
RecentFiles = @"e:'RecentFiles.txt";
if (!File.Exists(RecentFiles))
{
recentfiles = new StreamWriter(RecentFiles);
recentfiles.Close();
}
else
{
lines = File.ReadAllLines(RecentFiles);
items = File
.ReadLines(@"e:'RecentFiles.txt")
.Select(line => new ToolStripMenuItem()
{
Text = line
})
.ToArray();
}
for (int i = 0; i < items.Length; i++)
{
if (!File.Exists(items[i].Text))
{
using (StreamReader reader = new StreamReader(RecentFiles))
{
using (StreamWriter writer = new StreamWriter(RecentFiles))
{
while ((line = reader.ReadLine()) != null)
{
line_number++;
if (line_number == i)
continue;
writer.WriteLine(line);
}
}
}
}
}
在文本文件RecentFiles中,例如在第一行,我有:
d:'test.txt
第二行:
e:'test'test.txt
我想做的是,如果文本文件中的一个文件不存在,将其从RecentFiles.txt中删除
但是我得到了异常:
using (StreamWriter writer = new StreamWriter(RecentFiles))
进程无法访问文件'e:'RecentFiles.txt',因为它正在被另一个进程使用
让它变得更好:
lines = File.ReadAllLines(RecentFiles);
List< ToolStripMenuItem > items = new List< ToolStripMenuItem >();
using (StreamWriter writer = new StreamWriter(RecentFiles))
{
for (int i = 0; i < lines.Length; i++)
{
if (File.Exists(lines[i])) {
writer.WriteLine(lines[i]);
items.Add(new ToolStripMenuItem()
{
Text = lines[i]
});
}
}
}
在我看来,这就是你所需要的:
File.WriteAllLines(RecentFiles,
File.ReadAllLines(RecentFiles)
.Where(f => File.Exists(f)));