0

ユーザーの画像をアップロードし、指定した場所に保存しています。コードは通常のシナリオで正常に機能しています。つまり、ユーザーが画像を選択して保存すると、機能します。

チャレンジは、ユーザーが画像を選択し(おそらく間違いによる間違った画像) 、保存せずに、新しい画像を選択して保存すると発生します。 このシナリオでは、次のエラーが表示されます。

「別のプロセスで使用されているため、プロセスはファイルにアクセスできません。」

エラー時の場所から画像を削除しようとすると、次のメッセージが表示されてファイルを削除できません。

「ファイルが IIS ワーカー プロセスで開かれているため、操作を完了できません。ファイルを閉じて、もう一度やり直してください。」

コードは次のようになります。

            try
            {
                if (!Directory.Exists(folder))
                    Directory.CreateDirectory(folder);

                msf = new MemoryStream();
                bytes=FileUpload1.FileBytes;
                msf.Write(bytes, 0, bytes.Length);

                using (FileStream stream = new FileStream(folder + "/" + filename, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    //converting any graphic file type to jpeg format
                    Image img = Image.FromStream(msf);
                    img.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

                    msf.WriteTo(stream);
                    IsuploadSuccess = true;
                    img.Dispose();
                }
            }
            catch
            {
                IsuploadSuccess = false;
            }
            finally
            {
                if (msf != null)
                {
                    msf.Close();
                    msf.Dispose();
                }
            }

ファイルストリームに「 FileAccess.ReadWrite」「FileShare.ReadWrite 」を追加しようとしましたが、ファイルストリームのすべてのオプションで機能しません。

助けてください...

4

1 に答える 1

1

問題の解決策を得る代わりに、最終的にアプローチを変更して、課題の原因を取り除きます。ユーザーID(一意)にCurrentDateTimeを文字列に変換して追加したファイル名を変更し、ユーザーが変更を保存するまで一時フォルダーに保存します。これにより、チャレンジ シナリオごとに異なるファイルが形成されます。ユーザーによって作成された一時フォルダー (一意のユーザー ID が前に付いている) に各ファイルを保存した後、削除され、最後の変更がそれぞれのディレクトリに保存されます。

于 2013-01-15T12:35:51.103 に答える