2014-03-28 5 views
1

클래스의 DeleteFile 메서드를 사용하여 IsolatedStorage에서 파일을 삭제했습니다. 때때로이 메소드는 IsolatedStorageException을 던집니다. 내가 언급 한 MSDN 페이지에서 "대상 파일이 열려 있거나이거나 경로가 잘못되었을 때이 예외가 throw됩니다."IsolatedStorage의 파일이 이미 열려 있는지 확인하는 방법은 무엇입니까?

파일이 실제로 있는지 확인하려면 DeleteFile 메서드를 호출하기 전에 IsolatedStorageFile.FileExists 메서드를 호출 할 수 있습니다.

그러나 삭제하려는 파일이 열려 있는지 어떻게 알 수 있습니까? 나는 예외를 얻을 이유가 이유가 될 수 있기 때문에 그것을 알고 싶어)


업데이트 1 :. 내 응용 프로그램의 여러 인스턴스를 실행하려합니다.

답변

2

분명히 응용 프로그램의 여러 인스턴스를 사용하여 격리 저장소에서 파일을 열고 파일을 삭제하려고합니다. 글쎄, 네 문제가있어. 응용 프로그램의 다른 인스턴스에서 파일을 열면 파일을 삭제할 수 없습니다.

여기에 당신이 할 수있는 작업은 다음과 같습니다

  • 은 프로세스 간 동기화 see MSDN을하고 파일을 삭제해도 괜찮은지 경우 다른 응용 프로그램 인스턴스를 확인하기 위해 뮤텍스를 사용합니다.
  • 만 사용하는 각 응용 프로그램 인스턴스

솔루션을

  • 사용을 별도의 파일을 (당신은 재고 할 수 있습니다, 당신은 explcitly 여러 인스턴스를 원한다고하더라도) 응용 프로그램의 인스턴스를 실행할 수 있도록 응용 프로그램이 작동하는 방식과 파일이 사용되는 대상에 따라 다릅니다.

    편집 : 당신 수 없습니다 검사 파일이 파일을 다른 응용 프로그램 인스턴스에 의해 검사 및 삭제 사이에 열릴 수 있기를 삭제하기 전에 열려있는 경우.

    If(!FileIsOpen(path)) 
    { 
        // here, another application may open the file 
    
        DeleteFile(path); // oops 
    } 
    

    당신이 할 수있다 무엇 :

    try 
    { 
        DeleteFile(path); 
    } 
    catch(IsolatedStorageException) 
    { 
        // do nothing; let the other instances try and delete the file. 
    } 
    
  • +0

    덕분에 시간과 대답을 @helb. 나는 upvoted! :) 다른 인스턴스를 삭제한다고 가정하면 예외를 처리하는 것이 전략 일 수 있습니다. 응용 프로그램의 마지막 인스턴스가 예외를 throw하는 한 가지 경우를 제외하고는 거의 항상 작동합니다 (앞으로 추가 인스턴스가 없기 때문에 예외가 발생 함). – Learner

    관련 문제