C# 进程无法访问该文件,因为其他进程正在使用该文件。创建方法
这是一套方法:C# 进程无法访问该文件,因为其他进程正在使用该文件。创建方法,c#,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 ==
// 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);
在ReadMetadataFile方法中:
// Get meta data file path
metaDataFilePath = MetaDataFilePath(directory);
// Read meta data content
List<string> contents = ReadContentFile(metaDataFilePath);
return contents;
第一次,元数据文件并没有创建,我上传了一个文件并创建了它,引发了异常。之后,我删除了存储元数据文件的目录中的所有文件。然后我再次上传,异常被抛出。若我保留元数据文件,异常就消失了。
因此,问题来自File.Create方法。您有什么建议吗?错误消息没有帮助,因为大多数程序员遇到的最常见的错误原因是当他们自己的进程是阻塞的原因时,就像这里一样。因此,指责“另一个进程”的错误消息是不正确的 返回一个;与其他流一样,一个对象是-当您不再需要它时,应该将其处置。这可能很简单:
string metaDataFilePath = Path.Combine(path, Metadata);
if (!File.Exists(path))
File.Create(path).Dispose();
如果我使用using,我该如何编写它?@Tigran——在这种情况下,你将创建一个空的
using
块——在我看来,这比它澄清的更模糊。因此,最好重构代码,因为不允许盲目访问。File.Create(..).Dispose(..)看起来也不太好。另外,您必须将File.Create
包含在边缘案例中的try/catch
块中。@Damien\u不信者:我使用Dispose方法,它可以工作。我将在7分钟内标出答案:)(它告诉我:D)创建一个空文件有什么意义?
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
string metaDataFilePath = Path.Combine(path, Metadata);
if (!File.Exists(path))
File.Create(path);`
return metaDataFilePath;
string metaDataFilePath = Path.Combine(path, Metadata);
if (!File.Exists(path))
File.Create(path).Dispose();