ASP.Net FileUpload: переименовать имя файла перед сохранением, если оно уже существует - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно изменить имя файла, когда пользователи загружают из файла элемент управления загрузкой .

Если имя файла дублируется, добавляется счетчик имени файла, но здесь это не работает.

Я имею в виду, когда я загружаю файл, т.е. 00076007-2013.pdf , он сохраняется на хосте с таким именем 00076007-2013 (0) .pdf

Нокогда я снова хочу загрузить 00076007-2013.pdf на хосте, он перезаписывает последний ( 00076007-2013 (0) .pdf ).

Но я хочу, чтобы был 00076007-2013.pdf файл, сохраняемый с этим именем 00076007-2013 (1) .pdf на хосте.

enter image description here

Как я могу решить эту проблему.

Мой код ниже.

    int count = 0;
    string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
    string FileExstention = Path.GetExtension(FileUpload1.FileName);
    string[] files = Directory.GetFiles(Server.MapPath("/public/2Version/sk_PDF/"));


    if (FileUpload1.HasFile)
    {
        if (FileExstention == ".pdf")
        {
            try
            {
                if (File.Exists(Server.MapPath("/public/2Version/sk_PDF/") + fileName.ToString()))
                {
                    foreach (string s in files)
                    {
                        string filename = string.Empty;
                        filename = Path.GetFileName(s).Substring(0, Path.GetFileName(s).LastIndexOf("."));

                        if (filename.Contains("("))
                        {
                            filename = filename.Substring(0, filename.LastIndexOf("("));
                        }

                        if (filename == fileName.ToString().Trim())
                        {
                            count++;
                        }

                        FileUpload1.PostedFile.SaveAs(Server.MapPath("/public/2Version/sk_PDF/") + filename.ToString() + "(" + count.ToString() + ")" + FileExstention);
                    }
                }
                else
                {
                    FileUpload1.PostedFile.SaveAs(Server.MapPath("/public/2Version/sk_PDF/") + fileName.ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

Edit # 01 Это вывод.

Я загружаю файл 00076007-2013.pdf три раза.

Первый раз в порядке, 00076007-2013.pdf .

Второй раз ОК, 00076007-2013 (0) .pdf .

Последний раз, когда он был сохранен 00076007-2013 (0) .pdf , а не 00076007-2013 (1) .pdf

enter image description here

1 Ответ

0 голосов
/ 04 марта 2019

Пожалуйста, измените эту часть:

if (filename.Contains("("))
{
    filename = filename.Substring(0, filename.LastIndexOf("("));
}

С:

if (filename.Contains("("))
{
    filename = filename.Substring(0, filename.LastIndexOf("("));
    count++;
}

Надеюсь, я помог.

...