2014-04-01 49 views
1

这是方法的主体:进程无法访问该文件,因为它正在被另一个进程使用。 File.Create方法

// 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方法。你有什么建议吗?

+0

创建空文件有什么意义? –

回答

2

错误信息是帮助作用,因为这个错误的最常见的原因,大多数程序员经验当他们自己过程是堵塞的原因,因为它是在这里。因此,指责“另一个进程”的错误消息不正确。

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

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

最好将它包含在*使用*来调用Dispose(..)无论如何... – Tigran

+0

如果我使用using,我该如何编写它? – TPL

+2

@Tigran - 在这种情况下,你会创建一个空的'使用'块 - 虽然我脑海中的这些东西比它明确的更加模糊。 –

相关问题