【发布时间】:2011-12-21 03:51:24
【问题描述】:
考虑以下代码:
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
如果我的当前目录是c:\parentdir\Source(注意大写“S”),则输出为:
这会导致我的一个子程序出现问题,该子程序关心文件夹名称的正确大小写。 $str 被传递给我的子程序,所以我无法提前知道它是否有正确的大小写。如何确定匹配 $str 的路径的大小写正确名称?
更多细节在这里:
- 我意识到
../source是一个病态的例子,但它有助于 说明问题。即使$str正在请求 当前文件夹以外的文件夹。 - 我尝试了很多选项,包括
rel2abs,在全局搜索$str和其他人,但他们似乎都返回“source”而不是 “Source”。 - 我可以在
$str/..中搜索所有目录,将它们全部转换为 绝对路径并将它们与$str的绝对路径版本进行比较, 但这似乎是一个黑客行为。我希望有更优雅的东西。
【问题讨论】:
-
没有错。通常 Windows 文件系统不区分大小写,除非 NTFS 另有配置。
-
绝对正确。不幸的是,我的子程序需要正确的大小写,而不是简单地操作文件系统。所以,虽然 Windows 和 Perl 不在乎,但不幸的是我不得不这样做。
-
不区分大小写,是的,但它也是保留大小写。如果文件创建为
Foo,则可以使用foo访问它,但系统知道它的名称是Foo。
标签: windows perl path case-sensitive cwd