为什么File.exists(Filename)语句不起作用?

时间:2013-06-07 03:22:12

标签: asp.net file-io switch-statement

这是我的代码

 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语句的情况下只有line!File.Exists(filename))即使在重复文件的情况下也会被执行。为什么File.Exists(filename)没有被执行?

2 个答案:

答案 0 :(得分: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”隐含的

答案 1 :(得分:1)

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

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

从那时起!File.Exists总是如此。

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