【问题标题】:Removing the file with same name, extension doesn't matter删除同名文件,扩展名无关紧要
【发布时间】:2012-12-07 08:44:17
【问题描述】:

我在"~Content/Documents" 文件夹中有一些文件,其中包含每个上传的文件。在我的情况下,用户只能上传一个文件。

我已经完成了用户可以上传他的文件的上传部分。

if (file.ContentLength > 0)
{
    var fileName = Path.GetFileName(file.FileName);
    var fullpath = System.Web.HttpContext.Current.Server.MapPath("~/Content/Documents");
    file.SaveAs(Path.Combine(fullpath,"document"+Path.GetExtension(fileName)));
}

我的问题是: 用户可以上传".doc", ".docx", ".xls", ".xlsx", or ".pdf" 格式的文件。 现在,当用户上传".doc" 格式的文件时,它会被上传到文件夹中。稍后同一用户可以上传".pdf" 格式的文件,该文件也被上传到该文件夹​​。这意味着用户可以上传两个文件。

现在我想做的是:
当特定用户上传他的文档时:
-> 搜索用户上传的文档是否在该文件夹中。即是否存在具有不同扩展名的特定文件名。
->如果文件名已经存在,但扩展名不同,则删除该文件并上传新文件。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor file-extension


    【解决方案1】:

    试试这个,只是另一种方式;如果你的文件名是"document"

    string[] files = System.IO.Directory.GetFiles(fullpath,"document.*");
    foreach (string f in files)
    {
       System.IO.File.Delete(f);
    }
    

    所以你的代码是;

    if (file.ContentLength > 0)
    {
        var fileName = Path.GetFileName(file.FileName);
        var fullpath = System.Web.HttpContext.Current.Server.MapPath("~/Content/Documents");
    
        //deleting code starts here
        string[] files = System.IO.Directory.GetFiles(fullpath,"document.*");
        foreach (string f in files)
        {
           System.IO.File.Delete(f);
        }
        //deleting code ends here
        file.SaveAs(Path.Combine(fullpath,"document"+Path.GetExtension(fileName)));
    }
    

    【讨论】:

      【解决方案2】:

      这样的事情应该可以解决问题

        var files = new DirectoryInfo(fullpath).GetFiles();
        var filesNoExtensions = files.Select(a => a.Name.Split('.')[0]).ToList();
          //for below: or 'document' if that's what you rename it to be on disk
        var fileNameNoExtension = fileName.Split('.')[0]; 
        if (filesNoExtensions.Contains(fileNameNoExtension))
        {
          var deleteMe = files.First(f => f.Name.Split('.')[0] == fileNameNoExtension);
          deleteMe.Delete();
        }
        file.SaveAs(Path.Combine(fullpath,"document"+Path.GetExtension(fileName)));
      

      【讨论】:

        【解决方案3】:

        获取不带扩展名的新文件的文件名,然后遍历将上传到的文件夹中的所有文件名并检查该名称是否已存在。如果是这样,删除旧的上传,否则上传。

        var info = new FileInfo("C:\\MyDoc.docx");
        var filename = info.Name.Replace(info.Extension, "");
        var files = Directory.GetFiles("YOUR_DIRECTORY").Select(f => new FileInfo(f).Name);
        
        if (files.Any(file => file.Contains(filename)))
        {
            //Delete old file
        }
        //Upload new file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-29
          • 2012-05-12
          • 1970-01-01
          • 1970-01-01
          • 2021-07-04
          • 2015-09-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多