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

您正在分配块plik内部try 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 回答