C# 文件.移动问题:进程无法访问文件异常

C# 文件.移动问题:进程无法访问文件异常,c#,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");

运行此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);
        }
    }
}
我得到以下错误:

如果我将“newFile”代码的主体注释掉,那么它将无误地运行,但是我需要手动归档。如果我注释掉
文件.Move
部分,它运行正常,因此这就是罪魁祸首

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

试试这个

  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);
    }
  }
试试这个

  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);
    }
  }

您需要使用文件。使用文件后关闭。创建,这就是为什么您会收到一个错误,说文件被另一个进程使用。尝试将此行添加到代码中:

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

来源:

您需要使用文件。在使用文件后关闭。创建,这就是为什么您会收到一个错误,说文件被另一个进程使用。尝试将此行添加到代码中:

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

来源:

这不是出错的部分。正如我在文章中所说的,是File.Move部分崩溃了,而不是出错的部分。正如我在文章中所说,是File.Move部分崩溃了。这显然是一个文件锁定问题,正如你试图调用“log”和“newFile”方法一样。因此,请解释您试图通过“newFile”方法实现什么。如果您需要归档属于“前一个日期”的日志,则需要有一种机制来检查当前日期和前一个日期之间的差异。您正在处理许多与错误无关的内容。苏欧。。。。谢谢?但说真的,否决票怎么了?我编写了自己的代码,并明确了我的问题。这完全是为了什么。如果我知道c#,我就不会在这里了。这显然是一个文件锁定问题,正如你试图调用“log”和“newFile”方法一样。因此,请解释您试图通过“newFile”方法实现什么。如果您需要归档属于“前一个日期”的日志,则需要有一种机制来检查当前日期和前一个日期之间的差异。您正在处理许多与错误无关的内容。苏欧。。。。谢谢?但说真的,否决票怎么了?我编写了自己的代码,并明确了我的问题。这完全是为了什么。如果我知道c#我就不会在这里了。这可能会解决问题。您也可以在使用中包装File.Create()。问题是File.Create()调用在文件上创建一个锁(它返回一个FileStream),然后调用logFile.log尝试再次打开它。你可以在stacktrace中看到。谢谢,这很有效。这是我的第一个c#所以我正在学习诀窍。很高兴我能帮上忙!这可能会解决问题。您还可以使用包装将File.Create()包装到文件中。问题是File.Create()调用在文件上创建一个锁(它返回一个FileStream),然后调用logFile.log尝试再次打开它。你可以在stacktrace中看到。谢谢,这很有效。这是我的第一个c#所以我正在学习诀窍。很高兴我能帮上忙!