Файлы на сервере перезаписываются файлами с тем же именем

#c# #asp.net

#c# #asp.net

Вопрос:

Я пытаюсь загрузить файлы с одинаковыми именами на сервер, используя GUID, но он не работает и все еще заменяет старые файлы, кто-нибудь может мне помочь, сообщив, где я совершаю ошибку?

вот y-код для загрузки:

  protected void btnAddExpenditure_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {

           string FileName = FileUpload1.PostedFile.FileName;
           if (File.Exists(FileName))
            {
                FileName = Guid.NewGuid()   FileName;
            }
                //check file Extension amp; Size
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize > (20 * 1024))
            {
                Label1.Text = "Please upload a zip or a pdf file";
            }

            string fileextention = System.IO.Path.GetExtension(FileUpload1.FileName);
            if (fileextention.ToLower() != ".zip" amp;amp; fileextention.ToLower() != ".pdf")
            {
                Label1.ForeColor = System.Drawing.Color.Green;
                Label1.Text = "Please upload a zip or a pdf file";

            }



            else
            {
                string ReceiptFileName = Path.GetFileName(FileUpload1.PostedFile.FileName);



                //save file to disk

                FileUpload1.SaveAs(Server.MapPath("Reciepts/"   ReceiptFileName));
}
  

Комментарии:

1. Даже если вы задаете имя файла, вы не используете его для сохранения, вы используете переменную ReceiptFileName, вот в чем проблема

Ответ №1:

 string FileName = FileUpload1.PostedFile.FileName;
if (File.Exists(FileName))
{
    FileName = Guid.NewGuid()   FileName;
}
...    

string ReceiptFileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
  

Вот ваша проблема. Вы создаете новую строковую переменную, которая содержит имя файла ( FileName ) . Если он существует, вы изменяете FileName его с помощью нового идентификатора GUID. Но в самом конце…

 string ReceiptFileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
  

вы все еще используете исходный файл FileUpload1.PostedFile.Имя файла. Это должно быть изменено на

 string ReceiptFileName = Path.GetFileName(FileName);
  

РЕДАКТИРОВАТЬ: повторное чтение кода, я думаю, у вас могут возникнуть и другие проблемы. Предполагая, что FileUpload1.PostedFile .Имя файла — это полный путь (т.е. C:FolderFile.txt ), затем

 FileName = Guid.NewGuid()   FileName;
  

приведет к чему-то вроде 123-4321-GUIDC:FolderFile.txt

Я сомневаюсь, что это то, чего вы хотите. Возможно, вы захотите изменить это

 FileName = FileName   Guid.NewGuid();
  

Комментарии:

1. Нет проблем! Если это был правильный ответ, можете ли вы продолжить и пометить этот вопрос как правильный?