文件正在被其他进程使用,我必须关闭它吗?如何去做
本文关键字:何去做 其他 进程 文件 | 更新日期: 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()方法不会被使用,因为它们在读取或写入(上述方法)后关闭文件