問題

2011-10-07 2 views
1

私の最初の問題は、私は、このように私のファイルストリームなどを宣言した場合問題

filestream file; 
streamreader file_in; 
streamwriter file_out; 

try 
{ 
    file = new filestream("data.txt", FileMode.OpenOrCreate); 
    file_in = new streamreader(file); 
    file_out = new streamwriter(file); 
} 
catch(IOException exc) 
{ 
    Console.WriteLine(exc.Message); 
} 

iが発見され、「未割り当てのローカル変数の使用」というエラーをスローの形で来ますなぜなら、すべてのストリームがtryブロックの外側であるがメインの中で宣言されているからです。

私のtry/catchブロックを削除してストリームを1行(例:FileStream file = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);)として宣言すると、私のファイルからの読み込みは機能しますが、ファイルへの書き込みはできません。ファイルへの書き込み機能は次のとおりです。

public bool write_to_file(ref StreamWriter file_out) 
    { 
     if (this.is_empty == true) 
     { 
      Console.WriteLine("error, there is nothing to write."); 
      Console.WriteLine("press any key to continue..."); 
      Console.ReadKey(); 
      return false; 
     } 

     try 
     { 
      string temp = this.is_empty + "," + this.movie_title + "," + this.year_released + "," + this.publisher + "," + 
       this.length + "," + this.acting_rating + "," + this.music_rating + "," + this.cinematography_rating + "," + 
       this.plot_rating + "," + this.duration_rating + "," + this.total_rating; 
      file_out.WriteLine(temp); 
      return true; 
     } 
     catch (IOException exc) 
     { 
      Console.WriteLine(exc.Message); 
      Console.WriteLine("press any key to continue..."); 
      Console.ReadKey(); 
      return false; 
     } 
    } 

ご協力いただきありがとうございます。

+0

「FileStream」を「filestream」に変更した理由は何ですか? –

+0

-1、あなたが投稿したコード(第1部)はあなたが主張しているエラーを__not__します。 –

答えて

3

あなたが

FileStream file  = null; 
StreamReader file_in = null; 
StreamWriter file_out = null; 
+0

ありがとう、try/catchブロックエラーを修正しますが、私のストリームライターはまだファイルに適切なデータを書きたくないようです。あなたはおそらくその援助を提供することができますか? –

+0

本当ではありません。それはよいアイデアかもしれませんが、ここでは必要ありません。 –

+0

さて、私はその解決策に変更するとすぐに、再び作業を開始しました。何か不明な理由から、それは必要であるに違いない(それは私がそれを理解することができないバグである)。 –

4

まあは、宣言されているが、割り当てられていない...ので、どちらかそれらを設定するnullにまたはちょうど単にnullを行い、その場合でも、上部にあなたの変数に値を割り当てる必要がありますすべて一緒に。

try 
{ 
    using(var file = new FileStream("data.txt", FileMode.OpenOrCreate)) 
    using(var file_in = new StreamReader(file)) 
    using(var file_out = new StreamWriter(file)) 
    { 
     // Do your thing 
    } 
} 
catch 
{ 
    throw; 
} 
+0

try/catchブロックエラーを修正してくれてありがとう、私のストリームライターはまだファイルに適切なデータを書きたくないようです。あなたはおそらくその援助を提供することができますか? –

+1

さて、フルテキストと、あなたが読者と作家で何をしているのかを(そしてあなたの他のメソッドが呼び出されているときに)表示してください。 – canon

0

ファイルを閉じる前に、出力ストリームとファイルをフラッシュしてみてください。

file_out.Flush(); 
file.Flush(); // may be redundant but won't hurt 
+0

ありがとうございます。私はwritelineの直後にfile_out.flush()を置いて、バッファに何を書き込んでバッファをクリアするようにしました。さらに、ファイルが閉じる前にあなたが言ったことを加えて、 。 –

+0

@DamonSwayn:乾杯!喜んで助けになる。役に立つと判明した回答をupvoteに忘れずに、オプションであなたの問題を解決した回答を受け入れてください! – sehe