簡體   English   中英

為什么File.exists(Filename)語句不起作用?

[英]Why is File.exists (Filename) statement not working?

這是我的代碼

 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)沒有被執行?

問題是您正在檢查文件是否僅基於文件名存在,而不是文件的完整路徑。 應該是什么

 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”暗示的

我認為你遇到的問題是你將完整的文件名(帶路徑)減少到這里的文件名:

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

從那時起!File.Exists總是如此。

例如。 您正在將“C:\\ Somepath \\ myfile.txt”減少為“myfile.txt”,然后檢查它是否存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM