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) が機能しないことです。私が欲しいのは、同じファイルを2回アップロードした場合、重複したファイルがアップロードされようとしているという例外をスローしたいということです。ただし、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 に答える