尝试从文本文件中删除行时获取异常。我怎么解决呢?

时间:2015-06-02 06:07:12

标签: c# .net winforms

在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',因为它正由另一个进程使用

我该如何解决?

2 个答案:

答案 0 :(得分:2)

让它变得更好:

<%= options_from_collection_for_select(Product.all, 'id', 'category_name') %>

答案 1 :(得分:0)

在我看来,这可以满足您的需求:

File.WriteAllLines(RecentFiles,
    File.ReadAllLines(RecentFiles)
        .Where(f => File.Exists(f)));