该进程无法使用filewriter访问该文件

时间:2016-11-03 08:40:24

标签: c# .net

尝试检查文件是否为空,然后写一些类似"文本为空的"进入文件。

但每当我得到

  

该进程无法访问该文件,因为它正由另一个进程使用

即使我在写完后关闭了文件。

我在这里缺少什么?

StreamWriter myWriter1 = new StreamWriter(resultpath);
List<string> a = File.ReadAllLines(path).ToList();
List<string> b = File.ReadAllLines(newPath).ToList();

foreach (string s in a)
{
    Console.WriteLine(s);
    if (!b.Contains(s))
    {
        myWriter1.WriteLine(s);
        myWriter1.Close();
    }
    else
    {
        continue;
    }
}

string[] resultfile = File.ReadAllLines(resultpath);
if (resultfile == null || resultfile.Length == 0)
{
    myWriter1.WriteLine("Der er ikke nogen udmeldinger idag", true);
}
myWriter1.Close();

2 个答案:

答案 0 :(得分:2)

你可以关闭&amp;在循环中写入文件编写器并在再次写入同一文件时重新创建它。

另请注意,最好将其包装到using语句中以确保它将被关闭并自动设置释放的非托管资源(因此您不需要一次又一次地在循环中关闭它)。

List<string> a = File.ReadAllLines(path).ToList();
List<string> b = File.ReadAllLines(newPath).ToList();

using (var myWriter1 = new StreamWriter(resultpath, false))
{
    foreach (string s in a)
    {
        Console.WriteLine(s);

        if (!b.Contains(s))
            myWriter1.WriteLine(s);
    }
}


string[] resultfile = File.ReadAllLines(resultpath);

if (resultfile == null || resultfile.Length == 0)
{
    using (var myWriter1 = new StreamWriter(resultpath, true))
    {
        myWriter1.WriteLine("Der er ikke nogen udmeldinger idag", true);
    }

}

答案 1 :(得分:1)

试试这段代码。您正在关闭2个分析文件中每行的StreamWriter,但如果没有巧合,则永远不要关闭它。

using (var myWriter1 = new StreamWriter(resultpath, true))
{
    List<string> a = File.ReadAllLines(path).ToList();
    List<string> b = File.ReadAllLines(newPath).ToList();


    int coincidences=0;
    foreach (string s in a)
    {
        Console.WriteLine(s);


        if (!b.Contains(s))
        {
            myWriter1.WriteLine(s);
            coincidences++;
        }
    }

    if (coincidences == 0)
    {
         myWriter1.WriteLine("Der er ikke nogen udmeldinger idag", true);
    }

}

另请注意,对于IDisposable个对象,最好将其括在using子句中,因为它在完成时会处理所有资源。