1

我目前正在使用 File::Basename fileparse 来分离文件的目录、基本文件名及其扩展名,使用如下所示:

my($myfile_name,$mydirectory, $file_extension) = fileparse($$rhash_params{'storage_full_path_location'},'\..{1,4}');

但是请注意,您实际上可以为函数提供一个后缀数组,该数组将包含所有已知的文件扩展名。

所以我试图找到一种安全的方法来执行此操作,因为我已经看到我有一些奇怪的文件名要处理,即 file.0f1.htm 等。

问题:

  1. 是否有适用于 Windows 和 Unix 系统的常用扩展名列表?但就我而言,它主要用于 Windows。
  2. 是否可以安全地假设 Windows 中的所有文件名都应具有以三个字母字符结尾的扩展名?

如果有更好的方法可以做到这一点,请分享。

谢谢。

更新:

所以很明显我必须喝醉了才能忘记那些其他的扩展。:) 因此,我更新了当前的正则表达式以允许 1-4 个字符。

在这种情况下,我应该如何更改我的正则表达式行以正确匹配它?或者从谷歌查找所有常用的扩展并将它们放入一个数组中以传递给函数是一个更好的主意吗?我的用户通常是学生或老师。

4

2 回答 2

3

1. 是否有适用于 Windows 和 Unix 系统的常用扩展名列表?但就我而言,它主要用于 Windows。

是的,加载,整个互联网:http ://www.google.com/search?q=common+file+extensions

2. 是否可以安全地假设 Windows 中的所有文件名都应具有以三个字母字符结尾的扩展名?

不,完全可以在 Windows 中使用'.c','.java'等。

于 2009-01-07T10:07:31.977 回答
1

您的代码中有几个错误假设:

  • 文件不需要有扩展名。例如,Unix/Linux/...上的大多数二进制可执行文件根本没有扩展名。它们被简单地称为“bash”、“wget”、“sed”、“Xorg”……
  • 扩展名不必是三个字符长,正如@Alnitak 已经告诉你的那样:“.c”、“.java”、“.mpeg”、“.jpeg”、“.html”都是非常好的和相当广泛的扩展名
  • 在最后一个“。”处切割。可能会更省钱,但对于没有扩展名或具有多个(或多部分)扩展名的文件(例如“.tar.gz”、“tar.bz2”)仍然可能失败,这些文件经常出现在 Unix/Linux/.. 。-世界
于 2009-01-07T10:14:43.083 回答