windows - 在 Windows 上使用 Perl,如何确保在 chdir 之后获得正确大小写的路径?

标签 windows perl path case-sensitive cwd

考虑以下代码:

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,一个 glob 搜索 $str 等,但它们似乎都返回“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

关于windows - 在 Windows 上使用 Perl,如何确保在 chdir 之后获得正确大小写的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7995113/

相关文章:

c# - 检查路径区分大小写

C# 相对于程序集 DLL 而不是 EXE 的路径

c++ - 使用 minGW 构建 crypto562

c# - 将文本写入文本框

windows - Windows Performance Counter 的工作范式是什么?

perl - 我如何将 Unix/Sed/Perl 的音译 (tr) 应用于特定列?

perl - 我认为在 perl 中的 Telnet 输入缓冲区问题

linux 服务器和 windows 客户端上的 c++ 源代码?

perl - 如何在 Perl 中格式化输出?

java - 从 JTree 获取选定的文件名和路径