2013-01-01 2 views
4

내 WPF 앱은 Microsoft.Win32.OpenFileDialog를 사용하여 열 SQL Server 2008 데이터베이스를 선택합니다.WPF OpenFileDialog에서 사용중인 파일 검사를 비활성화하는 방법은 무엇입니까?

문제없이 작동합니다. 대화 상자에서 선택한 데이터베이스가 마지막 부팅 후 이전에 열렸을 때 파일이 백그라운드에서 SQL 서버에 의해 열린 상태로 유지되는 것처럼 보입니다. 내 응용 프로그램과 내 응용 프로그램이 다시 시작되었습니다). OpenFileDialog에서 OK를 클릭하면 대화 상자를 사용하여 컴퓨터가 재부팅 될 때까지 해당 특정 데이터베이스를 열 수 없기 때문에 "파일이 다른 응용 프로그램에서 사용되었습니다."라는 경고가 나타납니다. OpenFileDialog가 선택한 파일을 열려고 시도하고 다른 응용 프로그램 (SQL Server)에서 이미 열려 있다는 것을 발견하는 것 같습니다. OpenFileDialog에서 선택한 파일을 열지 않고 선택한 파일의 파일 이름을 확인하지 않고 비활성화하는 방법은 무엇입니까?

내 코드는 다음과 같습니다

public void OpenDatabase() { 
    // Let user select database to open from file browser dialog 
    // Configure open file dialog box 
    var dlg = new Microsoft.Win32.OpenFileDialog(); 
    dlg.FileName = ""; // Default file name 
    dlg.DefaultExt = ".mdf"; // Default file extension 
    dlg.Filter = "Databases (.mdf)|*.mdf|All Files|*.*"; // Filter files by extension 
    dlg.CheckFileExists = false; 
    dlg.CheckPathExists = false; 

    // Show open file dialog box 
    bool? result = dlg.ShowDialog(); // Gives file in use warning second time! 

    // Process open file dialog box results 
    if (result == true) { 
     // Open document 
     string filename = dlg.FileName; 
     TryOpenDatabase(filename); 
    } 
} 
+0

난 당신이 (코드와 문제에 전혀 관련이) WPF를 언급 제거하고 WINAPI로 다시 태그 :이 옵션은 OpenFileDialog를 래퍼 클래스에 노출 된 사실, 당신의 문제를 해결하기 위해이 코드 줄을 추가입니다 . 심각하게도, WPF에 관한 문제를 해결하지 못한다면, 그 중 하나만 가지는 척하지 마십시오. Win32.OpenFIleDialog이며 Win32는 WPF가 아닙니다. – TomTom

답변

5

기본 옵션은 초기 Windows 버전의 경우 OFN_NOVALIDATE이고, 이후 Windows 버전 및 .NET에서 제공되는 Vista 대화 상자의 경우 FOS_NOVALIDATE입니다. MSDN의 설명 :

응용 프로그램이 공유 위반이나 액세스 거부 오류와 같이 선택한 파일을 열 수 없게되는 상황을 확인하지 마십시오.

지금 보니 대화 상자에 데이터베이스 파일의 공유 위반 사항이 표시됩니다.

dlg.ValidateNames = false; 
+0

고마워, 그거 훌륭해! 어떻게 그 옵션을 놓칠 수 있는지 모르겠다. – Liell

3

그것은 OpenFileDialog를의 API에있는 MSDN 포럼 has a post about this

, 당신은 Dialog

ValidateNames = false 

을 사용하여 해당을 해제 할 수 있습니다.

+0

감사합니다. 이것은 내 머리카락을 모두 끌어 내지 못하게했습니다. Excel 파일을 다시 열려고하면 명령, 판독기 및 OldDbConnection을 닫지 못했습니다. 다른 사용자는 없으며 네트워크는 관련이 없습니다. 그냥 나와 테스트 파일. – Dave

관련 문제