0

我想删除图像文件。文件被命名为somefile.jpgsomefile_t.jpg,最后带有 的文件_t是缩略图。通过此删除操作,我希望删除缩略图和原始图像。

代码一直运行到foreach循环,该GetFiles方法不返回任何内容。string.Substring 操作成功地只返回没有扩展名的文件名,也没有_teg: 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();
               }

            }
4

2 回答 2

1

DirectoryInfo.GetFiles 方法(字符串,SearchOption)

您需要确保第一个参数searchPattern是正确的。在您的情况下,您正在提供FileName.Substring(0, FileName.Length - 2),这将是"somefile"。该方法不返回任何内容的原因是因为您正在查找名称为 somefile 的文件。您的意思是在基本文件名之外使用通配符:String.Concat(FileName.Substring(0, FileName.Length - 2), "*"),这将是"somefile*" ...至少我认为您正在寻找该searchPattern而不是任何其他人。

于 2012-06-01T03:14:47.893 回答
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);

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

于 2012-06-01T03:24:10.587 回答