Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中检查Windows上是否存在Unicode目录?_Perl_Unicode_Directory - Fatal编程技术网

如何在Perl中检查Windows上是否存在Unicode目录?

如何在Perl中检查Windows上是否存在Unicode目录?,perl,unicode,directory,Perl,Unicode,Directory,我需要检查Perl中是否存在Unicode目录。我使用的是WindowsXP和PerlCamelbox 5.10.0 如果我试图创建一个已经存在的目录(如Sinan在这里建议的),程序就会死亡 不幸的是如果(!-d$dir_name){创建目录$dir_name}似乎无法识别Unicode目录,或者我正在做一些完全愚蠢的事情。我试图在检查之前对目录名进行编码,但结果是一样的 如何检查Unicode目录的存在?在回答您之前的问题时,我忘记了它提供了一个良好的接口。我会回去看看答案。但是,对于眼前的

我需要检查Perl中是否存在Unicode目录。我使用的是WindowsXP和PerlCamelbox 5.10.0

如果我试图创建一个已经存在的目录(如Sinan在这里建议的),程序就会死亡

不幸的是
如果(!-d$dir_name){创建目录$dir_name}
似乎无法识别Unicode目录,或者我正在做一些完全愚蠢的事情。我试图在检查之前对目录名进行编码,但结果是一样的


如何检查Unicode目录的存在?

在回答您之前的问题时,我忘记了它提供了一个良好的接口。我会回去看看答案。但是,对于眼前的问题,您需要做的不是在
CreateDirectory
调用失败时自动
die
,而是检查。如果错误代码是
0xb7
error\u已经存在
),您可以继续快乐的生活

问题是,当您有一个Unicode文件名时,很难使用Perl函数继续愉快地工作。解决方案是使用Win32::GetANSIPath(只需关注路径的全长):

哦,还有,祝你好运删除那个目录

不过,严肃地说,整个Windows Unicode文件操作有点混乱

据我所知,如果希望能够使用Perl函数(如
open
)处理包含Unicode字符的路径,则需要ANSI路径名。例如:

my $file = catfile($dir_name, 'test.txt');

open my $fh, '>', $file
    or die "cannot create '$file': $!";
将失败,而

my $file = catfile($ansi_path, 'test.txt');

open my $fh, '>', $file
    or die "cannot create '$file': $!";

将成功(至少在我的系统上)。如果只使用Win32 API函数处理文件,则不需要ANSI路径(在您的情况下,这可能更容易)。有许多模块可以帮助您使用后者。

这是在什么平台上?文件名编码规则很可能在不同的操作系统中有所不同。哦,对不起!我使用的是Windows XP和Perl Camelbox 5.10.0。就目录创建而言,我理解您的示例。但是为什么我需要ANSI路径,我应该如何处理这个表示?谢谢你,思南@请参阅@jrockways注释:在Windows上始终支持Unicode。ANSI不是一个合适的替代品。默认路径(通常是您可以使用的唯一路径)是本地化的。更糟糕的是,“我的文档”路径和每个用户的AppData将包含用户名,即Unicode。即使在英文Windows上,您也可以使用中文用户的中文名称。@mAlters:谢谢您的建议。正确-我们也有路径中有Unicode目录名的用户。我忘了,我知道。如果这是我的选择,我就不会在Windows上投票支持Perl。以下是整个故事;-)“天哪,截止日期是昨天,我们没有产品——谁能写一个快速原型?”当我的同事告诉我他自愿让我做这项工作时,我差点死掉。
my $file = catfile($ansi_path, 'test.txt');

open my $fh, '>', $file
    or die "cannot create '$file': $!";