2010-11-24 8 views
1

私はC#でファイルストリームを扱っています。それはストレージキャッシュなので、ファイルが壊れた場合(破損したデータなど)、ファイルを削除すると、例外が再発行され、問題が報告されます。私はそれを最良の方法で実装する方法を考えています。私の最初の試行は:C#クローズストリームと何かが失敗した場合にファイルを削除します。

Stream fileStream = null; 
try 
{ 
    fileStream = new FileStream(GetStorageFile(), 
     FileMode.Create, FileAccess.Write, FileShare.Write); 
    //write the file ... 
} 
catch (Exception ex) 
{ 
    //Close the stream first 
    if (fileStream != null) 
    { 
     fileStream.Close(); 
    } 
    //Delete the file 
    File.Delete(GetStorageFile()); 
    //Re-throw exception 
    throw; 
} 
finally 
{ 
    //Close stream for the normal case 
    if (fileStream != null) 
    { 
     fileStream.Close(); 
    } 
} 

ファイルの書き込みに何か悪くなったら、fileStreamは2回閉じます。私はそれが動作することを知っているが、私はそれが最良の実装だとは思わない。

finallyブロックを削除して、ブロックをtryブロックに閉じ込めると思っていますが、あなたが専門家であり、専門家の声を聞きたいので、ここに投稿しました。

ありがとうございました。

答えて

10

あなたが使用してブロック内のFILESTREAMを置く場合は、それを閉じて心配して、ちょうど(catchブロック内のファイルの削除をクリーニングをアップしておきます。

try 
{ 
    using (FileStream fileStream = new FileStream(GetStorageFile(), 
     FileMode.Create, FileAccess.Write, FileShare.Write)) 
    { 
     //write the file ... 
    } 
} 
catch (Exception ex) 
{ 
    File.Delete(GetStorageFile()); 
    //Re-throw exception 
    throw; 
} 
+0

うん、ことをする必要はありません。ポイント。完璧、ありがとう! –

関連する問題