检测重复的文件扩展名
本文关键字:文件 扩展名 检测 | 更新日期: 2023-09-27 17:59:31
检测图像文件上重复文件扩展名的最佳方法是什么?(imageName.tif.jpg
)。为了确保jpg的文件扩展名,我必须在摄取时使用autoappends.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;
也许最简单的方法是先做一个测试,比如:
ExtraExtension = Path.GetExtension(Path.GetFileNameWithoutExtension(fileName))
看看是否还有额外的扩展。
然后,您可以根据已知扩展列表进行测试,如果是这样,您只需删除最后一个扩展:
fileName = Path.GetFileNameWithoutExtension(fileName)
您可以使用regex(使用|
分隔符添加任意数量的扩展):
if (Regex.IsMatch(fileName, @"'.(tif|jpg|gif|bmp)'.jpg$"))
path = path.Substring(0, path.Length - 4);
像这样的东西非常优雅(也是通用的):
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