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 に値が割り当てられていないと言いますか? 誰かが理由を説明できますか?

4

2 に答える 2

4

つまり、割り当てpliktry catchに例外をスローすると、最初に割り当てずに使用しようとします。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;
    }
于 2012-11-20T00:12:04.507 に答える
1

私はお勧めします: 1. 最初に FileExist(filename) を使用してファイルが存在することを確認します。2. 使用: ファイルの読み取りに (plik = new FileStream(nazwa, FileMode.Open)) を使用

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

直接入力して構文を確認してください。

try catch のために初期化せずに plik を閉じる可能性があるため、例外がポップしました。

于 2012-11-20T00:20:46.557 に答える