0

写真を撮って保存ボタンを押して、画像をコンピューターに保存するアプリケーションがあります。ほとんどの場合、これで問題なく動作します。しかし、一部のユーザーの画像が破損しています。これらの画像のサイズはほぼ正しいバイト数ですが、画像のバイト数を取得しようとすると、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 以外のメソッドを呼び出さないようにしてください。

しかし、これが何を意味するのかわかりませんか?ファイルの書き込み中に、ユーザーがタブレットをスリープ状態にしている可能性はありますか? これが起こっているのには、他にどのような理由が考えられますか?

4

1 に答える 1