该文件正由另一个进程使用,我必须关闭它吗?怎么样?

时间:2012-01-02 08:41:29

标签: c# text-files

我正在使用文本文件将某些数据用于以后的目的。所以我要做的是检查文件是否存在,如果不是,我在需要时创建一个新文件。这给了我一个错误,说我的文件仍在被不同的进程使用,但我不确定为什么会这样。

我就是这样做的。在这里,我正在检查程序运行时是否存在文件:

    private void CreateLastOpenFile()
    {
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        if (!File.Exists(file))
        {
            File.Create(file);
        }
    }

现在,我在检查或创建一个新文件时添加了一些数据(我在我的程序中有两个位置):

CreateLastOpenFile();
File.WriteAllText(file, data);

这里有什么问题?我已经从网上读过一些例子,但没有看到任何关于关闭任何文件的内容。

6 个答案:

答案 0 :(得分:4)

File.Create正在创建一个锁定文件的FileStream。你应该关闭它。实际上,您甚至不需要创建文件。 File.WriteAlltext将为您完成

答案 1 :(得分:4)

试试这个。这将在文件创建期间关闭打开的流

 if (!File.Exists(file))
        {
         FileStream str = File.Create(file);
         str.Close();
        }

答案 2 :(得分:2)

我建议你一步一步地创建和填充文件数据,使用像StreamWriter这样的类来允许你处理类,你应该没有问题这样做,这是一个例子:

StreamWriter Swr = new StreamWriter(FilePath); 
Swr.Write(Data);          
Swr.Close(); 
Swr.Dispose();

//执行关闭和处理,确保文件不再被锁定

您还可以使用File.WriteAllText(字符串Path,字符串Data),此方法不会锁定文件。

答案 3 :(得分:2)

您没有关闭File.Create()返回的流句柄。

建议您不要在案件中使用File.Create()。您可以使用File.WriteAllText(file, data); - 根据MSDN文档,如果文件不存在,则创建文件或在文件存在时覆盖内容。之后关闭文件流。

答案 4 :(得分:1)

如果您使用以下方法将数据写入文本文件,则无需检查文件是否存在,如果不存在则创建文件。 “WriteAllText”自己处理所有这些事情。它将创建文件(如果不存在),写入数据并关闭它,或覆盖文件(如果已存在)。     File.WriteAllText(文件,数据);

答案 5 :(得分:0)

如果您使用writeAllText()或readAllText()方法,则不使用close()方法,因为它们在读取或写入(上述方法之后)后关闭了文件