这是我的代码
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)没有被执行?
答案 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”,然后检查它是否存在。