检测重复的文件扩展名

时间:2014-04-23 18:29:20

标签: c#

检测图像文件上的重复文件扩展名的最佳方法是什么? (imageName.tif.jpg)。为了确保jpg文件扩展名,我必须使用自动将.jpg附加到摄取结束时。

我想过迭代已知文件扩展名的集合并检查文件名是否包含该扩展名。或者检查句点的第一个索引和最后一个,但是如果图像名称出于某种原因是my.test.tif.jpg。最后,一旦我检测到重复的扩展名,我想从中清除最后一个.jpg。

var fileName = Path.GetFileName(path);

        if (fileName != null)
        {
            int firstFileExtPos = fileName.IndexOf(".", StringComparison.Ordinal);
            int lastFileExtPos = fileName.LastIndexOf(".", StringComparison.Ordinal);

            if (firstFileExtPos != lastFileExtPos)
            {
                path = path.Substring(0, path.Length - 4);
            }
        }

        return path;

3 个答案:

答案 0 :(得分:2)

也许最简单的方法是先做一个测试:

ExtraExtension = Path.GetExtension(Path.GetFileNameWithoutExtension(fileName))

查看是否有额外的延期。

然后,您可以针对已知扩展名列表进行测试,如果是,则只删除最后一个扩展名:

fileName = Path.GetFileNameWithoutExtension(fileName)

答案 1 :(得分:0)

您可以使用正则表达式(使用|分隔符添加任意数量的扩展程序):

if (Regex.IsMatch(fileName, @"\.(tif|jpg|gif|bmp)\.jpg$"))
    path = path.Substring(0, path.Length - 4);

答案 2 :(得分:0)

这样的东西非常优雅(和通用):

static string PurgeRedundantExtensions( string fileName , params string[] extensions )
{
  if ( string.IsNullOrWhiteSpace(fileName) ) throw new ArgumentNullException( "fileName"               ) ;
  if ( extensions.Length < 1               ) throw new ArgumentException(     "no extensions supplied" ) ;

  List<segments> segments      =  fileName.Split('.') ;
  int            last          =  segments.Length - 1 ;
  bool           hasRedundancy =  segments.Length > 2
                               && extensions.Contains( segments[ last   ] , StringComparer.OrdinalIgnoreCase )
                               && extensions.Contains( segments[ last-1 ] , StringComparer.OrdinalIgnoreCase )
                               ;

  if ( hasRedundancy )
  {
    segments.RemoveAt(last) ;
  }

  string purged = string.Join( "." , segments ) ;
}

所以你可以这样说

string raw     = "foobar.gif.jpg" ;
string cleaned = PurgeRedundantExtensions( raw ,
                   "gif" , "jpg" , "jpeg" , "bmp" , "png" , "tiff" , "tif"
                   ) ;

然后回来

foobar.gif