无法删除C#.net中的现有文件

时间:2012-08-24 07:29:46

标签: c# asp.net file-upload

我正在尝试在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;
        }
    }
}

如何摆脱这个错误?

1 个答案:

答案 0 :(得分:0)

关于如何查找正在使用文件的进程

,还有一个类似的问题here

在尝试删除之前,您应该尝试处理任何文件方法。

如果你有一些东西会阻塞,直到文件可以访问

,你可以把它粘在一个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;
        }
    }