我希望删除图片文件。文件名为somefile.jpg
和somefile_t.jpg
,末尾带有_t
的文件是缩略图。使用此删除操作,我希望删除缩略图和原始图像。
代码一直运行到foreach
循环,GetFiles
方法返回任何内容。
string.Substring操作成功返回没有扩展名且没有_t
的文件名,例如:somefile
。
我想删除的文件名中没有无效字符。 代码对我来说很好,只有我能想到的是我不知道怎么不使用searchpattern 功能正常。
filesource = "~/somedir/somefile_t.jpg"
var dir = Server.MapPath(filesource);
FileInfo FileToDelete = new FileInfo(dir);
if (FileToDelete.Exists)
{
var FileName = Path.GetFileNameWithoutExtension(FileToDelete.Name);
foreach(FileInfo file in FileToDelete.Directory.GetFiles(FileName.Substring(0, FileName.Length - 2), SearchOption.TopDirectoryOnly).ToList())
{
file.Delete();
}
}
答案 0 :(得分:1)
DirectoryInfo.GetFiles Method (String, SearchOption)
您需要确保第一个参数 searchPattern 正确。在你的情况下,你提供FileName.Substring(0, FileName.Length - 2)
,这将是“somefile”。该方法什么都不返回的原因是因为您正在寻找名为somefile的文件。你打算做的是除了基本文件名之外还使用通配符:String.Concat(FileName.Substring(0, FileName.Length - 2), "*")
,这将是“somefile *” ...至少我认为你正在寻找那个 searchPattern 而不是其他任何一个。
答案 1 :(得分:1)
此代码适用于我:
var file_path = @"K:\Work\IoCToy\IoCToy\image.jpg";
var dir = Path.GetDirectoryName(file_path);
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file_path);
var files = Directory.EnumerateFiles(dir, string.Format("{0}*", fileNameWithoutExtension), SearchOption.TopDirectoryOnly);
当然,您必须通过返回的文件名删除文件。我假设你的文件夹只包含图像和以“image”子字符串开头的缩略图文件。