2014-01-30 53 views
0

我有這段代碼有時會拋出IOException異常,在它的消息中說The file is used by another process對我來說根本沒有任何意義。我真的很困惑。就我所知,一個目錄不是一個需要爲交叉線程操作處理的資源。Directory.GetDirectories()IOException

void CloudFolderWatcher_Created (object sender, FileSystemEventArgs e) 
{ 
    var foldersToCreate = Directory.GetDirectories(e.FullPath, "*", SearchOption.AllDirectories); 
    /// do something with foldersToCreate 
} 

這裏有什麼問題?我怎樣才能克服這個問題?

+0

難道這與「NTFS」(符號鏈接或其他?)有關。解決方案可能不會一次性獲得子文件夾,但使用遞歸處理大小寫,當某個目錄失敗時使用'IOExcpetion',然後忽略它並繼續。 – Sinatr

+0

我是從高層的頂層搜索SearchOption.AllDirectories,否則你會得到一個UnauthorizedAccessException –

回答

0

這意思是,一些其他進程(或者甚至是你的進程)上持有鎖阻止您的進程枚舉其內容的目錄之一。

0

因爲其餘的工作必須有FileSystemEventArgs 後面的問題。(假設你使用WFA)

認沽(A)僅高於公共Form1的()

你會本身所有foldersToCreate變量下的目錄。檢查你的「E」的論點

(A)

public string Mypath; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    DialogResult result = folderBrowserDialog1.ShowDialog(); 
    if (result == DialogResult.OK) 
     Mypath = folderBrowserDialog1.SelectedPath; 
    if (Mypath != "") 
     CheckFOlder(); 
} 

private void CheckFOlder() 
{ 
    try 
    { 
     var foldersToCreate = Directory.GetDirectories(Mypath, "*", SearchOption.AllDirectories); 
    } 
    catch (IOException e) 
    { 
     MessageBox.Show(e.Message.ToString()); 
    } 
    catch (UnauthorizedAccessException e) 
    { 
     MessageBox.Show(e.Message.ToString()); 
    } 
} 

PS您必須在表單中添加folderBrowserDialog1