【问题标题】:Error when i try to opendir当我尝试打开目录时出错
【发布时间】:2019-01-11 19:39:35
【问题描述】:

我被这段代码卡住了。也许原因是路径中的重音字符,我不知道。我正在使用的代码如下

my $var2 = realpath('C:\Users\brmelovi\Script\backups');
$source1 = 'N:\NBS_AR\COLLECTION\1.0 Times\2.0 Collections México\1. Macro de solicitação de Desglose';
$name1   = 'macro';

my $absol = path($source1)->absolute;
my @dire  = $absol->children( qr/^$name1/);
say $dire[0];
$dire[0]->copy($var2);

return 1;

文件和路径存在。我的代码已经使用另一个路径和名称,就像这样

my $var2 = realpath('C:\Users\brmelovi\Script\backups');
$source1 = 'N:\NBS_AR\SISTEMAS AR\Macro Credit Analysis & Collection';
$name1   = 'Credit Analysis';

my $absol = path($source1) -> absolute;
my @dire  = $absol->children( qr/^$name1/);
say $dire[0];
$dire[0]->copy($var2);

return 1;

我的标题和use 声明

use v5.28;
use strict;
use utf8;
use warnings;

use Cwd 'realpath';
use autodie;
use Path::Tiny;

错误信息是

'N:/NBS_AR/COLLECTION/1.0 Times/2.0 Collections MΘxico/1 上的错误 opendir。 Macro de solicitaτπo de Desglose':在 backup_script.pl 第 24 行没有这样的文件或目录。

编辑: 使用

解决的问题
use Encode::Local;
use Encode;

感谢您的解决方案。

【问题讨论】:

  • 请发帖minimal reproducible example。 IE。将您的代码按正确的顺序排列(use 语句在前),确保它运行(在函数之外没有 return),等等。
  • backup_script.pl 的第 24 行是什么?
  • 您确定您的源代码文件保存为UTF8编码吗?如果将文件 1. Macro de solicitação de Desglose 重命名为不带重音符号的名称(与上面的目录相同),错误会消失吗?
  • 作为一般观察(即:不暗示这将解决此特定问题),我建议使用正斜杠而不是反斜杠作为路径分隔符。它确实可以在 Windows 上运行,并且可以简化操作。

标签: perl opendir


【解决方案1】:

是的,可能是路径中的特殊字符。至少我可以在 Windows 上的 UTF-8 编码脚本中重现尝试 opendir() 目录 1. Macro de solicitação de Desglose 所描述的行为。

尝试使用Encode::Locale 对字符串进行正确编码,然后再将其传递给opendir()

...
use Encode::Locale;
use Encode;
...
$source1 = encode(locale => 'N:\NBS_AR\COLLECTION\1.0 Times\2.0 Collections México\1. Macro de solicitação de Desglose');
...

这对我有用。

【讨论】:

  • 伙计,这对我有用,非常感谢,这让我发疯了。
  • 你也可以使用encode("cp".Win32::GetACP(), $string)
  • 是的,您的编辑器使用的编码似乎与使用 UTF-8 的 Perl 不同。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 2021-06-28
  • 2023-04-08
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多