3

私はTry/Catchについてこれに不慣れです。以下のコードでは、ファイルが存在するかどうかを確認するための簡単なテストがあります。C#レッスンのタスクでは、Try / Catchを使用する必要がありますが、これを使用する方法がわかりません。Tryパート内でifステートメントを使用する必要がありますか、それともファイルが存在するかどうかを確認するためのより良い方法がありますか。中は試してみませんか?ファイルが単純なtxtファイルであるかシリアル化されたファイルである場合に違いはありますか?

if (File.Exists("TextFile1.txt"))
{
   MessageBox.Show("The file don't exist!", "Problems!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

私が使用しなければならないTry/Catchの方法

try
{
code to check if file exist here
}
catch
{
error message here
}
4

7 に答える 7

10
try
{
 if (!File.Exists("TextFile1.txt"))
    throw new FileNotFoundException();
}
catch(FileNotFoundException e)
{
   // your message here.
}
于 2012-07-26T07:02:38.027 に答える
7

を使用せずにファイルが存在するかどうかを確認する場合はFile.Exist、tryブロックでファイルを開いてから、例外FileNotFoundExceptionをキャッチしてみてください。

try
    {
        // Read in non-existent file.
        using (StreamReader reader = new StreamReader("TextFile1.txt"))
        {
        reader.ReadToEnd();
        }
    }
catch (FileNotFoundException ex)
    {
        MessageBox.Show("The file don't exist!", "Problems!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        // Write error.
        Console.WriteLine(ex);
    }
于 2012-07-26T06:59:39.697 に答える
7

これを試して :

try
{
   if(!File.Exist("FilePath"))
       throw new FileNotFoundException();

   //The reste of the code
}
catch (FileNotFoundException)
{
    MessageBox.Show("The file is not found in the specified location");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
于 2012-07-26T07:02:56.453 に答える
2

最初のスニプレットにファイルが存在するかどうかはすでに確認済みです。このコードがtry/catchブロック内にある必要はありません。

于 2012-07-26T06:57:38.907 に答える
2

使用throw

try
{
    if (!File.Exists("TextFile1.txt"))
        throw (new Exception("The file don't exist!"));
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
于 2012-07-26T07:00:17.573 に答える
0

予期しないエラーが発生した場合、またはリソースへのアクセスによるエラーを「予期している」場合にのみ、try/catchを使用します。それは少し紛らわしいように聞こえますが、あなたの原因では、どちらもありません。

ただし、ファイルが存在するかどうかを確認せずにファイルを読み取るためにストリームとして開いた場合は、try..catchを実行する必要があります。

全体として、try..catchは安全のために適用する必要があり、コードが複雑/長さの場合。

于 2012-07-26T07:00:08.157 に答える
0

この質問に関連して、次のスレッドが興味深いでしょう

http://social.msdn.microsoft.com/Forums/en-NZ/winappswithcsharp/thread/1eb71a80-c59c-4146-aeb6-fefd69f4b4bb

File.Exists APIはウィンドウ8で変更され、説明は次のとおりです。

現在、ファイルが存在するかどうかを確認する唯一の方法は、FileNotFoundExceptionをキャッチすることです。明示的なチェックを行うことで指摘されているように、オープニングは競合状態であるため、APIが追加されたファイルが存在することはないと思います。File IOチーム(私はそのチームに属していないので、はっきりとはわかりませんが、これは私が聞いたことです)は、ファイルが存在しない場合にスローするのではなく、このAPIがnullを返すことを検討していると思います。

File.Existsを使用したアプローチはスレッドセーフではなく、Windows 8のAPIから削除されました。したがって、FileNotFoundExceptionをキャッチするだけです。

于 2012-07-26T07:03:35.210 に答える