C# 创建文件和复制数据引发错误
我在Microsoft Visual Studio 2012中使用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
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虽然它忽略了这个问题,但它仍然为这个问题提供了任何解决方案??如果文件不存在,它将如何处理?如果文件不存在,它将如何处理??