0

asp.net にファイルをアップロードしようとしています。ファイルは画像または pdf です。ファイルが既に存在する場合は、既存のファイルを削除して新しいファイルをアップロードする必要があります。しかし、既存のファイルを削除しようとすると、「別のプロセスで使用されているため、プロセスはファイルにアクセスできません」というエラーが表示されます。これは私のファイルアップロードのコードです。

if (FileUploadFollowUpUN.HasFile)
{
    if (Request.QueryString.Count > 0 && Request.QueryString["PCD"] != null)
    {
        filename = System.IO.Path.GetFileName(FileUploadFollowUpUN.FileName.Replace(FileUploadFollowUpUN.FileName, Request.QueryString["PCD"] + " " + "D" + Path.GetExtension(FileUploadFollowUpUN.FileName)));
        SaveFilePath = Server.MapPath("~\\ECG\\") + filename;
        DirectoryInfo oDirectoryInfo = new DirectoryInfo(Server.MapPath("~\\ECG\\"));
        if (!oDirectoryInfo.Exists)
            Directory.CreateDirectory(Server.MapPath("~\\ECG\\"));

        if (File.Exists(SaveFilePath))
        {
            File.SetAttributes(SaveFilePath, FileAttributes.Normal);

            File.Delete(SaveFilePath);
        }
        FileUploadFollowUpUN.SaveAs(Server.MapPath(this.UploadFolderPath) + filename);
        Session["FileNameFollowUpUN"] = filename;
        if (System.IO.Path.GetExtension(FileUploadFollowUpUN.FileName) == ".pdf")
        {
            imgPhoto.ImageUrl = "~/Images/pdf.jpg";
            ZoomImage.ImageUrl = "~/Images/pdf.jpg";
            imgPhoto.Enabled = true;
        }
        else
        {
            imgPhoto.ImageUrl = "~/ECG/" + filename;
            imgPhoto.Enabled = true;
            ZoomImage.ImageUrl = "~/ECG/" + filename;
        }
    }
}

どうすればこのエラーを解消できますか?

4

1 に答える 1

0

ファイルを使用しているプロセスを見つける方法について、同様の質問がここにあります

削除を試みる前に、ファイル メソッドを破棄するようにしてください。

ファイルにアクセスできるようになるまでブロックする何かがある場合は、while ループに入れることができます。

  public static bool IsFileReady(String sFilename)
    {
        // If the file can be opened for exclusive access it means that the file
        // is no longer locked by another process.
        try
        {
            using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                if (inputStream.Length > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }
        }
        catch (Exception)
        {
            return false;
        }
    }
于 2012-08-24T07:39:15.080 に答える