文件正在被其他进程使用,我必须关闭它吗?如何去做

本文关键字:何去做 其他 进程 文件 | 更新日期: 2023-09-27 18:19:16

我使用一个文本文件来存放一些数据,以便以后使用。我要做的就是检查file是否存在,如果不存在,我就在需要的时候创建一个新文件。这给了我一个错误,说我的文件仍然被另一个进程使用,但我不确定为什么会这样。

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

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

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

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

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

文件正在被其他进程使用,我必须关闭它吗?如何去做

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

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

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

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

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

我建议您在一个步骤中创建和填充数据文件,使用一些类,如StreamWriter,允许您处置类,您应该没有问题这样做,这里有一个例子:

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

//执行close和Dispose操作确保文件不再被锁定

也可以使用File。WriteAllText(string Path, string Data),此方法不锁定文件

如果你使用下面的方法将数据写入文本文件,你不需要检查文件是否存在,如果不创建它。"WriteAllText"会自己处理所有这些事情。如果文件不存在,它将创建文件,写入数据并关闭它,如果文件已经存在,它将覆盖该文件。文件。WriteAllText(文件、数据);

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