1

fileUpload コントロールからエンド ユーザーがロードする C# を使用して Excel シートを読み込もうとしています。

別のボタン コントロール (アップロード) のイベント ハンドラーでサーバーにファイルを保存するコードを書いています。しかし、アップロード ボタンをクリックすると、次の例外が発生します。

別のプロセスで使用されているため、プロセスはファイル 'E:\MyProjectName\App_Data\sampledata.xlsx' にアクセスできません。

イベントハンドラーで使用したコードは次のとおりです。

string fileName = Path.GetFileName(file_upload.PostedFile.FileName);
string fileExtension = Path.GetExtension(file_upload.PostedFile.FileName);
string fileLocation = Server.MapPath("~/App_Data/" + fileName);
//if (File.Exists(fileLocation))
//    File.Delete(fileLocation);
file_upload.SaveAs(fileLocation);

ファイルを削除しても機能せず、同じ例外がスローされます。

4

3 に答える 3

2

他のプロセスがそのファイルにアクセスしていないことを確認してください。

このエラーは、メモリからファイルを明示的に削除せずにファイルをアップロードしようとすると発生することがあります。

だからこれを試してください:

try
{
    string fileName = Path.GetFileName(file_upload.PostedFile.FileName);
    string fileExtension = Path.GetExtension(file_upload.PostedFile.FileName);
    string fileLocation = Server.MapPath("~/App_Data/" + fileName);
    //if (File.Exists(fileLocation))
    //    File.Delete(fileLocation);
    file_upload.SaveAs(fileLocation);
}
catch (Exception ex)
{
    throw ex.Message;
}
finally
{
    file_upload.PostedFile.InputStream.Flush();
    file_upload.PostedFile.InputStream.Close();
    file_upload.FileContent.Dispose();    
    //Release File from Memory after uploading
}
于 2012-11-28T11:34:28.853 に答える
0

参照がメモリにハングアップしています。Visual Studio を使用している場合は、Clean Solution を使用して再構築し直してください。IIS を使用している場合は、アプリケーションのリサイクルを行ってください。

この問題を回避するには、一度使用したファイルを次のように破棄してください。

using(var file= new FileInfo(path))
{
   //use the file
  //it will be automatically disposed after use
}
于 2012-11-28T11:30:32.990 に答える
0

シナリオを正しく理解していれば。アップロード コントロールについては、アップロード ボタンのコードを記述する必要はないと思います。ボタンをクリックすると、アップロード コントロールがファイルをロックして使用しているため、1 つのプロセスで既に使用されています。ボタン用に書かれたコードは別のプロセスになります。その前に、ファイルがどこにも開かれておらず、編集待ちになっていないかどうかを確認してください。

于 2012-11-28T11:43:08.990 に答える