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

时间:2012-06-01 02:51:13

标签: c# asp.net

我希望删除图片文件。文件名为somefile.jpgsomefile_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();
               }

            }

2 个答案:

答案 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”子字符串开头的缩略图文件。