试图从文本文件中删除一行时出现异常.我怎么解决它?

本文关键字:异常 解决 一行 文件 文本 删除 | 更新日期: 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)));