2012-11-20 4 views
1
public static StringBuilder odczyt(string nazwa) 
    { 
     FileStream plik; 
     StringBuilder dane = new StringBuilder(""); 
     try 
     { 
      plik = new FileStream(nazwa,FileMode.Open); 
     } 
     catch(FileNotFoundException) 
     { 
      Console.WriteLine ("Brak pliku {0}", nazwa); 
     } 
     int w; 
     do 
     { 
      w = plik.ReadByte(); 
      if(w != -1) 
       dane.Append((char)w); 
     } 
     while((w > 0)); 
     plik.Close(); 
     return dane; 
    } 
} 

그것의 나의 간단한 기능 및 작동하고 있었다, 그러나 지금 나는 그것이 dont 어떻게 일어 났는지 모른다. Monodevelop에서 plik에 할당 된 값이 없다고 말합니까? Coudl 누군가 왜 설명하니?FileStream C# 시도하고 잡으십시오

+0

현재 'catch'아래에'catch (Exception)'을 추가 할 수 있습니다. – mcalex

답변

4

블록 안에 plik 블록을 할당합니다. 즉, 할당 중에 예외가 발생하면 먼저 할당하지 않고 사용하려고합니다. 따라서 블록으로 try catch 블록 이후에 코드를 이동 :

public static StringBuilder odczyt(string nazwa) 
    { 
     FileStream plik; 
     StringBuilder dane = new StringBuilder(""); 
     try 
     { 
      plik = new FileStream(nazwa, FileMode.Open); 

      int w; 
      do 
      { 
       w = plik.ReadByte(); 
       if (w != -1) 
        dane.Append((char)w); 
      } 
      while ((w > 0)); 
     } 
     catch (FileNotFoundException) 
     { 
      Console.WriteLine("Brak pliku {0}", nazwa); 
     } 
     finally 
     { 
      if (plik != null) 
      { 
       plik.Close(); 
      } 
     } 

     return dane; 
    } 
0

내가 제안 : 1. 파일이 처음 FileExist (파일 이름)을 사용하여 존재; 2. 사용 : 읽기 파일 (plik = 새로운하여 FileStream (로 비슷, FileMode.Open))

if (File.Exist(nazwa)) 
{ 
    using (FileStream plik = new FileStream(nazwa, FileMode.Open)) 
    { 
     ..... do other stuff 
    } 
} 
else 
{ 
// file not exist 
} 

체크 내가 직접 입력 할 때 구문을 사용하여.

시도 잡기 때문에 초기화하지 않고 plik를 닫을 수 있기 때문에 예외가 발생했습니다.

관련 문제