File.Move问题:进程无法访问文件异常

时间:2017-07-01 22:55:52

标签: c#

运行这个newFile方法时出错:

class logFile
{
    public static string logpath = @"D:\Program Files\CustomApps\DataFeed\";

    public static void log(string log)
    {
        string timestamp = DateTime.Now.ToString("yyyy_MM_ddTHH_mm_ss");
        Console.WriteLine(timestamp + log);
        File.AppendAllText(logpath + @"log_file_current.txt", timestamp + log + Environment.NewLine);
    }

    public static void newFile()
    {
        if (File.Exists(logpath + @"log_file_current.txt") == true)
        {
            File.Move(logpath + @"log_file_current.txt"
                    , logpath + @"log_files\log_file_ORPHANED_" + DateTime.Now.ToString("yyyy_MM_ddTHH_mm_ss") + ".txt");
        }

        try
        {
            File.Create(logpath + @"log_file_current.txt");
            logFile.log("logFile created.");
        }
        catch(System.NotSupportedException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

我收到以下错误:

enter image description here

如果我评论“newFile”代码的主体,那么它运行没有错误,但我需要手动存档。如果我注释掉File.Move部分,那么一切都运行正常,这就是罪魁祸首。

如何释放文件以便移动文件?

2 个答案:

答案 0 :(得分:3)

使用 File.Create 后,您需要使用 File.Close ,这就是为什么您收到错误消息,说明该文件是被其他进程使用< / em>的。尝试将此行添加到您的代码中:

try
{
    File.Create(logpath + @"log_file_current.txt").Close(); // Notice the .Close() here
    logFile.log("logFile created.");
}

来源: Closing a file after File.Create

答案 1 :(得分:0)

试试这个

  public static void log(string log)
  {
    string timestamp = DateTime.Now.ToString("yyyy_MM_ddTHH_mm_ss") + ": ";
    Console.WriteLine(timestamp + log);
    using (StreamWriter sw = File.AppendText(logpath + @"log_file_current.txt")) 
    {
        sw.WriteLine(timestamp + log);
    }
  }