2014-04-01 41 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 - 在這種情況下,你會創建一個空的'使用'塊 - 雖然我腦海中的這些東西比它明確的更加模糊。 –

相關問題