我在"~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"
格式的文件,该文件也会上传到该文件夹。这意味着用户可以上传两个文件。
现在我想做的是:
当特定用户上传其文档时:
- >搜索用户上传的文档是否在该文件夹中。即,是否存在具有不同扩展名的特定文件名。
- >如果文件名已经存在且扩展名不同,则删除该文件并上传新文件。
答案 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