在File.Create之后closures一个文件

我检查一下是否存在一个文件

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

但是,当我用这个新创build的文件创build一个StreamReader时,我得到一个错误说

该进程无法访问文件'[我的文件path]',因为它正在被另一个进程使用。

没有可以调用的File.Close(myPath) ,以便在创build后closures它,那么如何释放此资源以便稍后在程序中打开它?

File.Create(string)返回FileStream类的一个实例。 您可以调用此对象上的Stream.Close()方法,以closures它并释放它正在使用的资源:

 var myFile = File.Create(myPath); myFile.Close(); 

但是,由于FileStream实现了IDisposable ,所以可以利用using语句 (通常是处理这种情况的首选方法)。 这样可以确保在完成处理后,可以正确closuresstream并进行处理:

 using (var myFile = File.Create(myPath)) { // interact with myFile here, it will be disposed automatically } 

该函数返回一个FileStream对象。 所以你可以使用它的返回值来打开你的StreamWriter或使用对象的正确方法closures它:

 File.Create(myPath).Close(); 

File.Create返回一个可以调用Close()FileStream对象。

原因是因为从您的方法返回FileStream来创build一个文件。 您应该将FileStream返回到variables中,或者在File.Create之后直接从它调用close方法。

让use块帮助您实现这样的任务的IDispose模式是一个最佳实践。 也许更好的工作可能是:

 if(!File.Exists(myPath)){ using(FileStream fs = File.Create(myPath)) using(StreamWriter writer = new StreamWriter(fs)){ // do your work here } } 
 File.WriteAllText(file,content) 

创build写入closures

 File.WriteAllBytes-- type binary 

🙂