创建文件和复制数据引发错误

WiX*_*XeY 0 c# file-io locking

我在Microsoft Visual Studio 2012中使用C#,我正在处理以下代码:

 string source =  "d:\\source.txt";
 string newFile = "d:\\newFile.txt"; 
 if(!File.Exists(newFile))
 {
      File.Create(newFile);
      string content = File.ReadAllText(source);
      File.AppendAllText(newFile,content);
 }
Run Code Online (Sandbox Code Playgroud)

此代码成功创建了文件,但在编译时File.AppendAllText(newFile,content)会生成错误:

进程无法访问文件"d:\newFile.txt",因为它正被另一个进程使用.

为什么会这样?

Jar*_*Par 6

File.Create方法返回一个FileStream对象.这使文件保持打开状态以进行写入.在该对象关闭之前,无法写入该文件.解决此问题的最佳方法是简单地关闭返回的文件

File.Create(newFile).Close();
Run Code Online (Sandbox Code Playgroud)

该代码实质上是将现有文件的内容复制到新文件中.已经有一个API可以做到这一点:File.Copy.您的代码可以简化为以下内容

try { 
  File.Copy(source, newFile);
} catch (Exception) { 
  // File already exists or write can't occur 
}
Run Code Online (Sandbox Code Playgroud)