2012-11-20 35 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; 
    } 
} 

它是我的簡單功能,它工作,但現在我不知道它是如何發生它不。 Monodevelop說plik沒有賦值? Coudl有人解釋了爲什麼?FileStream c#並嘗試並趕上

+0

也許在當前'catch'下面加上catch(Exception) – mcalex

回答

4

您正在try catch塊內分配您的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 
} 

支票我直接鍵入的語法。

這個異常會彈出,因爲它可能會因try try而關閉沒有init的plik。