该进程无法访问该文件,因为它正由另一个进程使用.文件.创建方法

本文关键字:文件 进程 另一个 方法 创建 因为 访问 | 更新日期: 2023-09-27 17:55:53

这是一个方法体:

// 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;

在元数据文件路径方法中:

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

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

该进程无法访问该文件,因为它正由另一个进程使用.文件.创建方法

错误消息没有帮助,因为大多数程序员遇到的此错误的最常见原因是他们自己的进程是阻塞的原因,就像这里一样。因此,指责"另一个进程"的错误消息是不正确的。

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

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