[英]Trying to delete multiple files from a single directory whose names match\contain a particular string
我想删除图像文件。 这些文件名为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();
}
}
DirectoryInfo.GetFiles方法(String,SearchOption)
, is proper. 您需要确保第一个参数正确。 在你的情况下,你提供FileName.Substring(0, FileName.Length - 2)
,这将是“somefile” 。 该方法什么都不返回的原因是因为您正在寻找名为somefile的文件。 as opposed to any other one. 你打算做的是除了基本文件名之外还使用通配符: String.Concat(FileName.Substring(0, FileName.Length - 2), "*")
,这将是“somefile *” ... at至少我认为你正在寻找那个 ,而不是任何其他的。
这段代码适合我:
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”子字符串开头的缩略图文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.