2009-08-17 29 views
2

C#で次の文が正しく実行されたかどうかを確認するにはどうすればよいですか?Cでのファイル操作

StreamReader sr = new StreamReader(Path_To_File); 

答えて

3

もしそうでなければ、例外がスローされると思います。だから何もしない。それは問題があるかどうかを教えてくれます。あなたはそれが「using」でなければなりません。しかし:

using(StreamReader sr = new StreamReader(Path_To_File)) 
{ 
    // consume sr 
} 
1

StreamReadersはIDisposableを実装しているため、 'using'ブロックを使用できます。

using(StreamReader sr = new StreamReader(Path_To_File)) { 

} 
11

それが例外をスローしなかった場合、それが正しく実行しました。例外をスローした場合は、cosntructorがそれ以降に整理することを期待するのが妥当です。それ以外の場合は、完了したらDisposeに電話して、関連するリソースを解放する必要があります。他の回答が言ったように、これを達成するためにはほとんど確実にusingステートメントを使いたいと思っています。

また、代わりにFile.OpenTextを使用することがあります:私は(かなりめったにありません)異なるオプションで渡す必要があるとき

using (TextReader reader = File.OpenText(fileName)) 
{ 
} 

私は通常StreamReaderコンストラクタを使用します。

1

、これはあまりにも明白と思われるので、私は、問題の何かが欠けてもよいが、探すために二つのことが

  1. あり、それはエラーをスローしましたか? と
  2. これを実行してStreamReaderを使用して読み込むと、期待する内容が得られますか?

1が偽で2が真であれば、正しく実行されます。

+0

それがなかったですどんなエラーも投げないでください。 1は偽です。 2は真です。しかし、私はこれがいつも起こっていることを保証したいと思っていました。そして、エラーがどこに発生したのか分かりました。だから私はjst好奇心が強いと私はなぜ私の質問をしたthats。 – zack

0

あなたは通常、インスタンスsrで何もしません。 try catchブロック内のそのオブジェクトを参照する次のコマンドをカプセル化します。

1

StreamReader constructor(文字列パスの引数を前提とする)は、失敗した場合に例外をスローします。リンクから引用

ArgumentExceptionが
パスは空の文字列( "")です。

ArgumentNullException
パスがnullです。

FileNotFoundException
ファイルが見つかりません。

DirectoryNotFoundException
マッピングされていないドライブ上にあるなど、指定されたパスが無効です。

IOException パスに、ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくないか無効です。

1

次のような標準のtry/catchブロックを使用して例外をチェックしたいと思います:

string pathToFile = @"G:\My Documents\donkeysex.txt"; 

StreamReader sr = null; 

try 
{ 
    sr = new StreamReader(pathToFile); 
    sr.Read(); 
    // etc. 
} 
catch (System.IO.FileNotFoundException ex) 
{ 
    // Handle exception 
} 
catch (System.IO.DirectoryNotFoundException ex) 
{ 
    // Handle exception 
} 
catch (System.IO.IOException ex) 
{ 
    // Handle exception 
} 
catch (Exception ex) 
{ 
    // Handle exception 
} 
finally 
{ 
    if (sr != null) 
     sr.Dispose(); 
} 

あなただけのファイルを使用して、次に読む前に存在していることを確認したい場合:

if (System.IO.File.Exists(pathToFile)) 
{ 
    // Do your stuff 
} 
+0

あなたの詳細な回答はDanにありがとうございます。それは完璧に働いた。 – zack

+0

+1は良い理論的答えであり、唯一のものはtry/catchである。しかし、これを生産コードにコピーしてコピーしたくない。 VirenはExcption Handling戦略を調査すべきです。 –