使用streamreader后,C#无法删除文件

时间:2017-09-06 08:16:58

标签: c# streamreader

在使用流读取器后,我似乎无法使用

删除文件
  

“因文件正在使用而无法访问文件”

C#中的

错误。

我可能会错过一些东西,但我不知道是什么,这是代码:

fileEntries = from fullFilename
    in Directory.EnumerateFiles(@"Data\csv\pending")
    select Path.GetFileName(fullFilename);

i = 1;

foreach (string file in fileEntries)
{
    if(i == 1)
    {
        folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";

        using (System.IO.FileStream fs = System.IO.File.Create(folder + @"\create-user.csv"))
        {

        }

        using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user.csv", true))
        {
            files.WriteLine(",; prenom; nom; username; pasword; email; question; reponse; GroupID");
        }

        string curfile = @"\create-user-archive.csv";
        if(!(File.Exists(folder + curfile)))
        {
            using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user-archive.csv", true))
            {
                files.WriteLine(",; prenom; nom; username; pasword; email; question; reponse; GroupID");
            }
        }
    }


    folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\pending";
    sb = new StringBuilder();

    filef = new System.IO.StreamReader(folder + @"\create-user-" + i + ".csv");
    line = filef.ReadLine();

    while ((line = filef.ReadLine()) != null)
    {
        sb = new StringBuilder();
        sb.AppendLine(line.Substring(0, line.Length));
        folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
        using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user.csv", true))
        {
            files.WriteLine(",; " + sb.ToString().Split(';')[1] + ";" + sb.ToString().Split(';')[2] + ";" + sb.ToString().Split(';')[1] + "." + sb.ToString().Split(';')[2] + ";" + GenerateToken(6) + ";" + sb.ToString().Split(';')[3] + ";" + "1" + ";" + "1");
        }

        folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
        using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user-archive.csv", true))
        {
            files.WriteLine(",; " + sb.ToString().Split(';')[1] + ";" + sb.ToString().Split(';')[2] + ";" + sb.ToString().Split(';')[1] + "." + sb.ToString().Split(';')[2] + ";" + GenerateToken(6) + ";" + sb.ToString().Split(';')[3] + ";" + "1" + ";" + "1");
        }
    }
    i++;
    sourceFile = System.IO.Path.Combine(@"Data\csv\pending", file);
    File.Delete(sourceFile);
}
在流读取器完成后,

文件是否应该停止使用?我尝试使用等待文件解锁的函数来删除文件,但它是无限的,这意味着我必须停止一个永无止境的过程,但我看不出哪一个。

3 个答案:

答案 0 :(得分:3)

您需要关闭filef。

将代码包装在using语句中会自动关闭阅读器

using ( System.IO.StreamReader filef = new System.IO.StreamReader(folder + @"\create-user-" + i + ".csv") {
    ....yourcodehere
}

或者,完成后调用filef.Close()(在删除文件之前)

答案 1 :(得分:0)

您必须关闭您创建的流才能处置系统资源。您可以使用Close方法或使用模式,因为类实现了IDisposable接口。我建议你选择第二个选项。

可以查看这篇文章:https://stackoverflow.com/a/707339/6244709

答案 2 :(得分:0)

您需要拨打以下电话;

filef.Close();

这将在你删除之前;

  while ((line = filef.ReadLine()) != null)
            {
                sb = new StringBuilder();
                sb.AppendLine(line.Substring(0, line.Length));
                folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
                using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user.csv", true))
                {
                    files.WriteLine(",; " + sb.ToString().Split(';')[1] + ";" + sb.ToString().Split(';')[2] + ";" + sb.ToString().Split(';')[1] + "." + sb.ToString().Split(';')[2] + ";" + GenerateToken(6) + ";" + sb.ToString().Split(';')[3] + ";" + "1" + ";" + "1");
                }

                folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
                using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user-archive.csv", true))
                {
                    files.WriteLine(",; " + sb.ToString().Split(';')[1] + ";" + sb.ToString().Split(';')[2] + ";" + sb.ToString().Split(';')[1] + "." + sb.ToString().Split(';')[2] + ";" + GenerateToken(6) + ";" + sb.ToString().Split(';')[3] + ";" + "1" + ";" + "1");
                }
            }
            i++;
            sourceFile = System.IO.Path.Combine(@"Data\csv\pending", file);
            filef.Close();
            File.Delete(sourceFile);