写真を撮って保存ボタンを押して、画像をコンピューターに保存するアプリケーションがあります。ほとんどの場合、これで問題なく動作します。しかし、一部のユーザーの画像が破損しています。これらの画像のサイズはほぼ正しいバイト数ですが、画像のバイト数を取得しようとすると、null 値がロードされます。
写真を保存するための私のコードは次のとおりです。
try
{
using (FileStream stream = new FileStream(localCopyFileLocation, FileMode.Create))
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.QualityLevel = quality;
encoder.Frames.Add(BitmapFrame.Create(photo, null, metadata, null));
encoder.Save(stream);
}
}
catch (Exception ex)
{
//Write to log etc.
}
FileStream コンストラクター (SafeFileHandle、FileAccess)から、私はこれを読みました:
Close が呼び出されると、ハンドルも閉じられ、ファイルのハンドル数が減少します。
FileStream は、ハンドルを排他的に制御できると想定しています。FileStream がハンドルを保持しているときに読み取り、書き込み、またはシークを行うと、データが破損する可能性があります。データの安全性を確保するために、ハンドルを使用する前に Flush を呼び出し、ハンドルを使用した後に Close 以外のメソッドを呼び出さないようにしてください。
しかし、これが何を意味するのかわかりませんか?ファイルの書き込み中に、ユーザーがタブレットをスリープ状態にしている可能性はありますか? これが起こっているのには、他にどのような理由が考えられますか?