尝试从名称匹配包含特定字符串的单个目录中删除多个文件

本文关键字:单个目 删除 文件 字符串 包含特 | 更新日期: 2023-09-27 18:36:08

我想删除图像文件。这些文件被命名为somefile.jpgsomefile_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);

当然,您必须按返回的文件名删除文件。我在这里假设您的文件夹仅包含以"图像"子字符串开头的图像和缩略图文件。