0

当我创建我log.txt的 withFile.Create(Path.Combine(PATH, NAME));然后尝试从中读取时,我得到一个异常:{System.IO.IOException: The process cannot access the file 'c:\temp\log.txt' because it is being used by another process..

如果log.txt文件退出并且没有在该方法中创建,我可以读取和写入日志而不会出现任何问题。

创建的是log.txt异步的,问题是程序在创建之前试图读取它吗?

public static void WriteToLog(string text)
{
    try
    {
        if (!Directory.Exists(PATH))
        {
            Directory.CreateDirectory(PATH);
        }

        if( !File.Exists(Path.Combine(PATH, NAME)) )
        {
            File.Create(Path.Combine(PATH, NAME));
        }

        var logLines = File.ReadAllLines(Path.Combine(PATH, NAME)).ToList<string>();
        logLines.Insert(0, "-------------------------------------------------End New Log");
        logLines.Insert(0, text);
        logLines.Insert(0, "-------------------------------------------------Start New Log");
        File.WriteAllLines(Path.Combine(PATH, NAME), logLines);
    }
    catch (Exception ex)
    {
    }
}
4

2 回答 2

6

File.Create 创建一个文件流,创建后打开。因此该文件由其自己的进程使用。

只需将其更改为

        using(var f = File.Create(Path.Combine(PATH, NAME))) { } ;
于 2012-09-25T06:39:02.610 回答
3

File.Create具有类型的返回值FileStream。如果您不打算将它用于任何事情,那FileStream应该是Closed(或d)。Dispose

但是,对于日志文件,我通常会FileStream直接通过构造一个FileStream对象,使用接受参数的构造函数之一来创建。FileShare这样,您可以保持流打开,但指示其他程序应该能够打开它以进行读取:

var fs = new FileStream(Path.Combine(PATH, NAME),
   FileMode.OpenOrCreate,
   FileAccess.Write,
   FileShare.Read); //Now other people can access the log file whilst I'm still writing to it
于 2012-09-25T06:40:00.893 回答