2014-01-30 3 views
0

가끔은 IOException을 던지는 코드 조각이 있습니다. 메시지에 The file is used by another process이 나와 전혀 이해가되지 않습니다. 나는 정말로 여기에서 혼란 스럽다. 디렉토리는 크로스 스레드 작업을 처리해야하거나 내가 아는 한 sth처럼 처리해야하는 리소스가 아닙니다.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

난 당신이 HD의 최상위 수준에서 찾고 SearchOption.AllDirectories 그렇지 않으면 UnauthorizedAccessException 얻을 것이다 supress –

답변

0

일부 다른 프로세스 (또는 프로세스)이 잠금을 보유하는 것이 당신의 "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 확인 프로세스가 내용을 열거하지 못하게하는 디렉토리 중 하나.

0

는 FileSystemEventArgs 뒤에 문제가있을 수 있어야합니다. 다만 공공 Form1에()

넣어 (A)를 (당신은 WFA를 사용하는 것이 가정하면) 당신은 그 자체로 모든 folderToCreate 변수 아래의 디렉토리. 이 의미 folderBrowserDialog1