该进程无法访问该文件,因为该文件正由另一个进程使用。 File.Create方法

时间:2014-04-01 07:13:56

标签: c#

这是一个方法体:

// Get files from directory base on search pattern
string[] files = Directory.GetFiles(path, searchPattern, searchOption);

List<string> contents = ReadMetadataFile(path, out metaDataFilePath);

if (contents == null || contents.Count == 0)
   listFiles = ProcessIfMetadataIsNull(files, metaDataFilePath);

在ProcessIfMetadataIsNull方法中,我调用一个方法来写数据:

using (StreamWriter sw = new StreamWriter(metaDataFilePath, isAppend))
{
   foreach (var item in assemblyFiles)
   {
       sw.WriteLine(item.GetStringToWrite());
   }
}

在ReadMetadataFile方法中:

// Get meta data file path
metaDataFilePath = MetaDataFilePath(directory);

// Read meta data content
List<string> contents = ReadContentFile(metaDataFilePath);

return contents;

在MetaDataFilePath方法中:

if (!Directory.Exists(path))
   Directory.CreateDirectory(path);

string metaDataFilePath = Path.Combine(path, Metadata);
if (!File.Exists(path))
   File.Create(path);`

return metaDataFilePath;

第一次,元数据文件没有创建,我上传了一个文件并创建了它,抛出了异常。之后,我删除了存储元数据文件的目录中的所有文件。然后我再次上传,抛出了异常。如果我保留元数据文件,则异常消失。 所以,问题来自File.Create方法。你有什么建议吗?

1 个答案:

答案 0 :(得分:2)

错误消息无益,因为大多数程序员经历的此错误的最常见原因是他们的拥有进程是阻塞的原因,因为它在这里。所以错误消息指责“另一个进程”是不正确的。

File.Create返回FileStream;与其他流一样的对象是IDisposable - 当您不再需要它时,您应该将其丢弃。这可能很简单:

string metaDataFilePath = Path.Combine(path, Metadata);
if (!File.Exists(path))
   File.Create(path).Dispose();