2010-01-27 5 views
12

유럽 전역에서 사용하기 위해 현지화 된 응용 프로그램을 보유하고 있습니다.StreamReader가 파일이 존재하지 않는다고 불평하지만

디스크에서 파일을로드하는 메뉴 옵션이 있습니다.

이 작업은 내 dev에 컴퓨터에서 잘 작동하지만 난에서는 StreamReader 파일을 열려고하면 _, 스페인어 등

FileNotFoundException이 생성됩니다 예를 들어 프랑스어를 다른 운영 체제를 테스트하는 데 사용하는 가상 머신에서 작동하지 않습니다 .

는 " '파일 C 찾을 수 없습니다 : \ 프로그램 파일 \ MyCompany \ MyTool \ 빈 \ 파일 \ debug.txt'"라고

것입니다을, 파일이 올바른 위치와 함께, 존재 올바른 파일 이름.

대상 (프랑스어) 운영 체제의 디렉토리 이름은 dev 시스템과 동일합니다.

아이디어가 있으십니까?

string ourPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 

      try 
     { 
      System.IO.StreamReader sr = System.IO.File.OpenText(ourPath + @"\bin\Files\debug.txt"); 
      string input = null; 
      while ((input = sr.ReadLine()) != null) 
      { 
       m_text.Append(input); 
      } 
      sr.Close(); 
     } 
     catch (System.IO.FileNotFoundException) 
     { 
      MessageBox.Show("LoadDebugOptions: File Not Found: " + ex.Message); 
     } 
+0

File.Exists 메서드를 사용하여 파일이 존재하는지 확인해보십시오. – Faisal

답변

27

이 문제가 발견되었습니다.

운영 체제가 explorer에 표시된 파일을 "debug.txt"를 "debug.txt.txt"로 읽는 것으로 확인되었습니다.

이 값은 System.IO.Directory.GetFiles를 호출하여 대상 디렉터리의 파일을 나열하여 결정됩니다.

Windows 탐색기에서 .txt 확장명을 제거하여 "디버그"로 표시하면 파일이 발견됩니다.

탐색기가 알려진 유형의 파일 확장명을 대상 컴퓨터에 숨기고 있습니다.

참고 ------------------------------------------- ---------------------

탐색기를 열고 도구 -> 폴더 옵션과보기 탭을 차례로 선택합니다.

아래로 스크롤하고 "알려진 파일 형식의 파일 확장명 숨기기"를 선택 취소하십시오.

+0

고맙습니다 - 제 문제를 해결했습니다. –

1

어쩌면 그 접두사가 잘못 : C:\Program Files

예를 들어, 폴더 "C:\Arquivos de Programas\"된다 포르투갈어 (브라질) Windows 설치에 대한; 당신은 당신의 창 설치에는 동일한 "특징"가다는 것을 확인해야한다.

해당 샘플 코드가 해당 폴더에서 실행되는 경우 상대 경로를 사용할 수 있습니다.

또한 현재 사용자가 충분한 권한이없는 읽으려고 그것은 인해 보안 예외 일 수 있습니다 ourPath = "%ProgramFiles%\MyCompany\MyTool\

1

를 사용을 시도 할 수 있습니다. 나는

5

Environment.SpecialFolders

예를 들어 보면, 당신이 올바른 폴더에 있는지 확인하려면 .... 여러 번 것을 발견했다

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); 

또한 특정 파일에 대한 사용 권한을 확인하십시오.

+0

불행히도 최종 사용자가 다른 곳에 응용 프로그램을 설치할 수 있으므로이 방법으로 명시 적 폴더를 사용할 수 없습니다. 이것이 응용 프로그램이 설치된 디렉토리 경로를 얻는 이유입니다 (편집 참조). 또한 대상 컴퓨터에서 폴더가 Program Files라고 확인되었습니다. – Kildareflare

4

나는 또한 그것을 열기 전에

File.Exists() 

를 사용하려고합니다. 그리고 약간의 조언은 사용하는 것입니다.

Path.Combine() 

경로의 두 부분을 결합 할 때.

관련 문제