删除具有相同名称的文件,扩展名无关紧要

时间:2012-12-07 08:44:18

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

我在"~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"格式的文件,该文件也会上传到该文件夹​​。这意味着用户可以上传两个文件。

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

3 个答案:

答案 0 :(得分:3)

试试这个,换一种方式;如果您的文件名为"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)));
}

答案 1 :(得分: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)));

答案 2 :(得分:0)

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

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