Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建文件和复制数据引发错误_C#_File Io_Locking - Fatal编程技术网

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

C# 创建文件和复制数据引发错误,c#,file-io,locking,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.AppendAllTe

我在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);
 }
此代码成功创建了文件,但在编译
文件时。AppendAllText(newFile,content)
会生成错误:

进程无法访问文件“d:\newFile.txt”,因为其他进程正在使用该文件


为什么会这样?

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

File.Create(newFile).Close();
这段代码实质上是将现有文件的内容复制到新文件中。已经有一个API可以完全做到这一点:
File.Copy
。您的代码可以简化为以下内容

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

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

File.Create(newFile).Close();
这段代码实质上是将现有文件的内容复制到新文件中。已经有一个API可以完全做到这一点:
File.Copy
。您的代码可以简化为以下内容

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

您不需要创建文件,
AppendAllText
create如果不存在,则会出现异常,因为file.create返回打开的文件流,然后再次尝试访问同一文件。在访问同一文件之前,需要正确关闭该流

 string source =  "d:\\source.txt";
 string newFile = "d:\\newFile.txt"; 
 if(!File.Exists(newFile))
 {
      File.AppendAllText(newFile,File.ReadAllText(source););
 }
文件。附录文本:

打开一个文件,将指定的字符串附加到该文件,然后 关闭文件如果文件不存在,此方法将创建 文件,将指定的字符串写入该文件,然后关闭该文件

但是你可以简单地用一行完成你的任务

File.Copy(source , newFile , false);

您不需要创建文件,
AppendAllText
create如果不存在,则会出现异常,因为file.create返回打开的文件流,然后再次尝试访问同一文件。在访问同一文件之前,需要正确关闭该流

 string source =  "d:\\source.txt";
 string newFile = "d:\\newFile.txt"; 
 if(!File.Exists(newFile))
 {
      File.AppendAllText(newFile,File.ReadAllText(source););
 }
文件。附录文本:

打开一个文件,将指定的字符串附加到该文件,然后 关闭文件如果文件不存在,此方法将创建 文件,将指定的字符串写入该文件,然后关闭该文件

但是你可以简单地用一行完成你的任务

File.Copy(source , newFile , false);

那么你的问题是什么?系统中的某些内容锁定了文件,无法读取。卸下锁。我应该如何卸下锁lock@EvanTrimboli可能是他自己在调用并忽略返回的文件句柄时做的。关闭与该文件的所有连接!并执行IOoptions@EvanTrimboli虽然它忽略了,但它仍然在给这个问题任何解决方案??那么你的问题是什么?系统中的某些内容锁定了文件,无法读取。卸下锁。我应该如何卸下锁lock@EvanTrimboli可能是他自己在调用并忽略返回的文件句柄时做的。关闭与该文件的所有连接!并执行IOoptions@EvanTrimboli虽然它忽略了这个问题,但它仍然为这个问题提供了任何解决方案??如果文件不存在,它将如何处理?如果文件不存在,它将如何处理??