0

这是我的代码

 protected void btnAdd_Click(object sender, EventArgs e)
{
    if (FileUploadControl.HasFile)
    {
        try
        {
            string filename = Path.GetFileName(FileUploadControl.FileName);
            switch(SubDrpDownList.SelectedIndex)
            {
                case 0:
                    if (!File.Exists(filename))
                        FileUploadControl.SaveAs(Server.MapPath("~/Books/Math/") + filename);
                    else if (File.Exists(filename))
                    {
                        throw new DuplicateWaitObjectException();
                    }
                     break;
                case 1:
                    if (!File.Exists(filename))
                    FileUploadControl.SaveAs(Server.MapPath("~/Books/Physics/") + filename);
                    else if (File.Exists(filename))
                    {
                        throw new DuplicateWaitObjectException();
                    }
                    break;
                case 2:
                    if (!File.Exists(filename))
                    FileUploadControl.SaveAs(Server.MapPath("~/Books/Drawing/") + filename);
                    else if (File.Exists(filename))
                    {
                        throw new DuplicateWaitObjectException();
                    }
                    break;
            }
            lblStatus.Text = "Upload status: File uploaded!";
        }
        catch (Exception ex)
        {
            lblStatus.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }
    }
}

根据类别,我希望将书籍上传到我使用 switch 语句实现的 diffrenet 文件夹中。问题是当我上传一本书然后第二次再次上传时,File.Exists(filename) 不起作用。我想要的是如果我两次上传同一个文件,我想抛出一个重复文件一直在尝试上传的异常。但是在 case 语句的情况下,即使在重复文件的情况下,也只会执行行 !File.Exists(filename)) 。为什么 File.Exists(filename)) 没有被执行?

4

2 回答 2

1

问题是您正在检查文件是否存在仅基于文件名,而不是文件的完整路径。应该是什么

 protected void btnAdd_Click(object sender, EventArgs e)
{
    if (FileUploadControl.HasFile)
    {
        try
        {
            string filename = Path.GetFileName(FileUploadControl.FileName);
            switch(SubDrpDownList.SelectedIndex)
            {
                case 0:
                    if (!File.Exists(Server.MapPath("~/Books/Math/") + filename))
                        FileUploadControl.SaveAs(Server.MapPath("~/Books/Math/") + filename);
                    else
                    {
                        throw new DuplicateWaitObjectException();
                    }
                     break;
                case 1:
                    if (!File.Exists(Server.MapPath("~/Books/Physics/") + filename))
                    FileUploadControl.SaveAs(Server.MapPath("~/Books/Physics/") + filename);
                    else
                    {
                        throw new DuplicateWaitObjectException();
                    }
                    break;
                case 2:
                    if (!File.Exists(Server.MapPath("~/Books/Drawing/") + filename))
                    FileUploadControl.SaveAs(Server.MapPath("~/Books/Drawing/") + filename);
                    else
                    {
                        throw new DuplicateWaitObjectException();
                    }
                    break;
            }
            lblStatus.Text = "Upload status: File uploaded!";
        }
        catch (Exception ex)
        {
            lblStatus.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }
    }
}

这将说明您上传文件的位置与您检查文件存在的位置不同的事实

此外,elseif 只需要是 else,因为它要么存在,要么不存在,因此您无需再次检查它是否存在,这是“else”所暗示的

于 2013-06-07T03:27:22.107 回答
1

我认为您遇到的问题是您将完整的文件名(带路径)减少为此处的文件名:

string filename = Path.GetFileName(FileUploadControl.FileName);

从那时起 !File.Exists 总是正确的。

例如。您正在将“C:\Somepath\myfile.txt”减少为“myfile.txt”,然后检查它是否存在。

于 2013-06-07T03:30:03.027 回答