考虑以下代码:
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
如果我当前的目录是c:\parentdir\Source
(注意大写“S”),其输出将是:
c:/parentdir/Source
c:/parentdir/source
这会导致我的一个关心文件夹名称正确大小写的子例程出现问题。 $str 被传递到我的子例程中,因此我无法提前知道它是否具有正确的大小写。如何确定匹配路径的大小写正确名称$str
?
更多详细信息请参见此处:
- 我意识到
../source
这是一个病态的例子,但它有助于
说明问题。即使发生$str
正在请求一个
当前文件夹以外的文件夹。
- 我尝试了很多选择,包括
rel2abs
,全局搜索$str
,还有其他人,但他们似乎都回来了”source
“ 代替
”Source
".
- 我可以搜索
$str/..
对于所有目录,将它们全部转换为
绝对路径并将它们与绝对路径版本进行比较$str
,
但这似乎是一个黑客。我希望有更优雅的东西。
#!/usr/bin/perl
use warnings; use strict;
use Cwd;
use File::Spec::Functions qw( canonpath );
use Win32;
print canonpath( cwd ), "\n";
chdir '../source';
print canonpath( cwd ), "\n";
print canonpath( Win32::GetLongPathName( cwd ) ), "\n";
C:\DOCUME~1\...\LOCALS~1\Temp\t\Source> t
C:\DOCUME~1\...\LOCALS~1\Temp\t\Source
C:\DOCUME~1\...\LOCALS~1\Temp\t\source
C:\Documents and Settings\...\Local Settings\Temp\t\Source
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)