2017-11-25 1 views
0

、私は次のコードを持っている:問題のファイルが存在しない場合は例外を処理するか、nullをチェックしますか?

private async Task <string>IsolatedStorageReadTextFile(string uFileName) 
{ 
     string sRet = ""; 

     StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(uFileName); 
     if (file != null) 
     { 
      using (var inputStream = await file.OpenReadAsync()) 
      using (var classicStream = inputStream.AsStreamForRead()) 
      using (var streamReader = new StreamReader(classicStream)) 
      { 
       while (streamReader.Peek() >= 0) 
       { 
        sRet = streamReader.ReadLine(); 
       } 
      } 
     } 
     return sRet; 
} 

を、IDEでエラーが発生します:

enter image description here

I

1)させてくださいIDEのデバッグは、ワーナー(「この例外でブレークしないでください」と言う)このエラーを無視し、私はちょうど聞かせなければならない「(ファイル!= null)の場合は」ジョブ

を行います

2)またはファイルが実際に存在するかどうかを確認する必要があります

3)try-catchを使用しますか?

私は答えに応じて、コードの重要な部分を追加する必要がありました:UWPに、アクセスしようとしてよりファイルが実際に存在するかどうかをチェックする他の方法があるように思わないので

private async Task <bool> LocalExists(string uFileName) 
    { 
     bool b = false; 
     //https://stackoverflow.com/questions/8626018/how-to-check-if-file-exists-in-a-windows-store-app 
     try 
     { 
      StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(uFileName); 
      b = (file != null); 
     } 
     catch (Exception ex) 
     { 
      b = false; 
     } 

     return b; 
    } 

これは、同じ例外がスローされますそれ:

How to check if file exists in a Windows Store App?

だから、疑問は残ります。

+0

にUWPアプリケーションのための期限が切れだ2011年にWindowsストアのアプリのために正しかったです。 File.Existsは呼び出しの前に多くの面倒を避けることができます。 (100%安全ではありませんが...) – Steve

答えて

1

以前に存在したファイルをチェックするか、例外を処理できます。

例外をキャッチしないと、次の行は実行されないため、nullのファイルをチェックすることはできません(C++などの他のプログラミング言語とは異なります)。

このオプションを解除しないでください。例外がスローされた場合にのみ、アプリケーションを一時停止しないでください(ブレークポイントをアクティブにする)。プログラムの動作は変更されません。

+1

ファイルが存在するかどうかを確認するために、単にそのファイルにアクセスしようとしているかどうかを確認します。https://stackoverflow.com/questions/8626018/how-to-check-if -file-exists-in-a-windows-store-appなので、現時点ではtry-catchが必要です。 – tmighty

+0

これはWindowsストアアプリにのみ適用されます。ファイルが存在するかどうかは、https://msdn.microsoft.com/en-us/library/system.io.fileで確認できます。存在する(v = vs.110).aspx –

+1

私はUWPを扱っています。あなたは「Windows Store App」と言うとき、それは正しいのですか? – tmighty

2

それは常に存在する必要がありますしない限り、ファイルが存在する場合には、例えば、チェックする必要があります。それはあなたのプログラムの一部なので。 しかし、ファイルが存在していても、ロックされているか、別の読み込みエラーが発生する可能性があるため、try catchを使用する必要があります。あなたが提案した3つのソリューション(ファイルが最初に存在して確認するか、例外をキャッチし、エラーを無視)の

2

、唯一のキャッチ例外は動作します。例外を無視すると、アプリがクラッシュする可能性があります。 GetFileAsyncを呼び出す前にファイルが存在するかどうかをチェックすることは、チェックの後でファイルを開く前にファイルが削除されるタイミングの問題があります。

ファイルが存在する場合は、StorageFile.TryGetItemAsyncを使用し、存在しない場合はnullを返すことをお勧めします。

StorageFile file = await ApplicationData.Current.LocalFolder.TryGetItemAsync(uFileName) as StorageFile; 
if (file != null) 
{ 
    //... 
} 

チェックする方法はありませんと言うリンクされたスレッドは、それはあなたのコードの流れを駆動するために例外を使用しないでください2017年

関連する問題