尝试从名称匹配包含特定字符串的单个目录中删除多个文件
本文关键字:单个目 删除 文件 字符串 包含特 | 更新日期: 2023-09-27 18:36:08
我想删除图像文件。这些文件被命名为somefile.jpg
和somefile_t.jpg
,末尾带有_t
的文件是缩略图。通过此删除操作,我希望删除缩略图和原始图像。
代码一直工作到foreach
循环,其中GetFiles
方法不返回任何内容。字符串。子字符串操作成功仅返回没有扩展名和_t
的文件名,例如:somefile
.
我要删除的文件名中没有无效字符。代码对我来说看起来不错,我唯一能想到的是我不知何故没有使用搜索模式功能正常。
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 Method (String, SearchOption)
您需要确保第一个参数 searchPattern 是正确的。如果您正在提供FileName.Substring(0, FileName.Length - 2)
,这将是"某个文件"。该方法不返回任何内容的原因是,您正在寻找字面上名为 somefile 的文件。你的意思是在基本文件名之外使用通配符:String.Concat(FileName.Substring(0, FileName.Length - 2), "*")
,这将是"somefile*"......至少我认为您正在寻找该搜索模式,而不是任何其他搜索模式。
这段代码对我有用:
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);
当然,您必须按返回的文件名删除文件。我在这里假设您的文件夹仅包含以"图像"子字符串开头的图像和缩略图文件。