Win32.pm 提供了一个接口给 CreateDirectory
等函数使用:
Win32::CreateDirectory(DIRECTORY)
创建 DIRECTORY
目录,成功时返回 true。失败时请检查 $^E
获取详细错误信息。
DIRECTORY 可包含系统代码页之外的 Unicode 字符。目录创建完成后,您可以使用 Win32::GetANSIPathName()
获取可传递给系统调用和外部程序的名称。
之前的答案:
注意:这里记录下来是因为您试图在程序中直接使用 CreateDirectoryW
。
如果要手动执行此操作,请使用 Win32::API 导入 CreateDirectoryW
:
Win32::API->Import(
Kernel32 => qq{BOOL CreateDirectoryW(LPWSTR lpPathNameW, VOID *p)}
);
您需要对$path
进行编码,以便用于CreateDirectoryW
函数:
use strict; use warnings;
use utf8;
use Encode qw( encode );
use Win32::API;
Win32::API->Import(
Kernel32 => qq{BOOL CreateDirectoryW(LPWSTR lpPathNameW, VOID *p)}
);
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
my $dir_name = 'Волгогра́д';
my $ucs_path = encode('UCS-2le', "$dir_name\0");
CreateDirectoryW($ucs_path, undef)
or die "Failed to create directory: '$dir_name': $^E";
E:\> dir
2010/02/02 01:05 PM Volgograd
2010/02/02 01:04 PM Moscow
以上是一个命令行窗口展示的目录内容,其中包含两个文件夹名称,分别为Volgograd和Moscow。