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 回答