Removing the file with same name, extension doesn't matter

走远了吗. 提交于 2019-12-11 14:08:57

问题


I have some files in "~Content/Documents" folder which holds every uploaded file. In my case the user can only upload one file.

I have done the uploading part where the user can upload his file.

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)));
}

My problem is: User can upload either ".doc", ".docx", ".xls", ".xlsx", or ".pdf" format files. Now when the user upload the file of ".doc" format it is uploaded to the folder. Later the same user can upload the file of ".pdf" format which is also uploaded to the folder. That means the user can upload two files.

Now what I want to do is:
When a specific user uploads his document:
->search whether the document uploaded by the user is in that folder or not. i.e. the specific filename with different extension exists or not.
->if the filename already exists with different extension then remove that file and upload the new file.


回答1:


Try this, Just another way; If your filename is "document"

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

So your code would be;

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:


Something like this should do the trick

  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:


Get the filename of the new file without extension, then loop through all the filenames in the folder where it will be uploaded to and check if the name already exists. If so, delete the old an upload, else upload.

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


来源:https://stackoverflow.com/questions/13759648/removing-the-file-with-same-name-extension-doesnt-matter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!