ASP.Net FileUpload:如果已经存在,则在保存之前重命名文件名

时间:2019-03-04 10:34:22

标签: c# file-upload upload

当用户从文件上传控件上传时,我需要更改文件名。

如果文件名重复,则会在文件名上添加计数,但此处不起作用。

我的意思是,当我上传文件 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;
            }
        }
    }

编辑#01 这是输出。

我已经上传了 00076007-2013.pdf 文件3次。

第一次确定, 00076007-2013.pdf

第二次确定, 00076007-2013(0).pdf

上次保存他的时间是 00076007-2013(0).pdf ,而不是 00076007-2013(1).pdf

enter image description here

1 个答案:

答案 0 :(得分:1)

请更改此部分:

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

使用:

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

我希望我能帮上忙。