0

ファイルをアップロードする必要があるアプリケーションがあり、それらのファイルをダウンロードするオプションがあります。ファイルをアップロードすると問題なく動作しますが、問題はダウンロード オプションにあります。アップロードファイルをダウンロードしようとすると、以下のエラーメッセージが表示されます

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

30 分後に試してみたところ、エラーは発生しませんでしたが、新しいファイルをアップロードしてダウンロードしようとすると、同じエラーが発生します。

以下は私のダウンロードとアップロードのコードです。問題がどこにあるかを理解するのを手伝ってください。

アップロード

FileStream fileStream = File.Create(HttpContext.Current.Server.MapPath("myfile.pdf"), (int)filestream.Length);
byte[] bytesInStream = new byte[filestream.Length];
filestream.Read(bytesInStream, 0, bytesInStream.Length);
fileStream.Write(bytesInStream, 0, bytesInStream.Length);

ダウンロード

HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=myfile.pdf");

FileStream sourceFile = new FileStream(HttpContext.Current.Server.MapPath("myfile.pdf"), FileMode.Open);
long FileSize;
FileSize = sourceFile.Length;
byte[] getContent = new byte[(int)FileSize];
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();

HttpContext.Current.Response.BinaryWrite(getContent);
HttpContext.Current.Response.End();

アップロード後にファイルがリリースされていないようですが、ダウンロード中に問題が発生しないように、アップロード後にそのファイルをリリースする方法がわかりません。

4

1 に答える 1

0

私は問題を理解しました。小さく見えたが大きな間違いがあった。アップロード機能の最後に以下の行を入れるのを忘れていました:

fileStream.Dispose();

ストリーム オブジェクトを破棄しなかったため、ファイルはまだそのオブジェクトによって使用されていました。ガベージ コレクターがしばらくしてからファイルを解放していたので、後でダウンロードできました。

于 2013-06-17T09:04:35.937 に答える