Windows 如果目录已存在,mkpath是否失败?
我正在调试一个朋友机器上的问题。 我编写了一个脚本来复制一些文件,该脚本利用了(我知道mkpath已经过时,现在有make_path,但我使用的是旧版本的perl) 在我的机器上(使用相同版本的perl和操作系统等),即使在目录已经存在的情况下,脚本也可以正常运行 但是, 当我尝试在我朋友的机器上运行脚本时,在已经存在的目录上调用mkpath时会抛出一个错误 它抛出的错误是“mkdir:File exists” 我很困惑,为什么脚本可以在我的机器上运行,而不能在他的机器上运行 谢谢 法里德 编辑并添加更多有用的信息 好的,这里还有一些东西可以帮助诊断这个问题Windows 如果目录已存在,mkpath是否失败?,windows,perl,Windows,Perl,我正在调试一个朋友机器上的问题。 我编写了一个脚本来复制一些文件,该脚本利用了(我知道mkpath已经过时,现在有make_path,但我使用的是旧版本的perl) 在我的机器上(使用相同版本的perl和操作系统等),即使在目录已经存在的情况下,脚本也可以正常运行 但是, 当我尝试在我朋友的机器上运行脚本时,在已经存在的目录上调用mkpath时会抛出一个错误 它抛出的错误是“mkdir:File exists” 我很困惑,为什么脚本可以在我的机器上运行,而不能在他的机器上运行 谢谢 法里德 编辑
\\NETWORK-COMP/Directory1/Directory2/Directory3
Directory1不是一个文件,它实际上是一个GUID,并且没有冲突(我每次都仔细检查) 我怀疑部分路径存在,但它不是目录
$ echo foo >foo
$ perl -MFile::Path -e'mkpath "foo"'
mkdir foo: File exists at -e line 1
另一种可能是这两台机器有不同版本的File::Path,其中一台机器有一个bug。如果是这样,您可以升级
第三种可能是您在其中一台机器上输入错误。我明白了
mkdir PATH: File exists
但是你得到
mkdir : File exists
这可能是因为版本不同,但我不这么认为,因为“
:
”前面的空格。使用(执行$Data::Dumper::Useqq=1;
)检查您的输入,以确保您正在传递您认为正在传递的内容。相同的操作系统?相同版本的Perl?嗯
我在试图创建的路径中存在现有文件时看到了此错误消息。例如,我尝试创建目录foo/bar/bar/foo
,但是有一个文件foo/bar/bar
,mkpath
将失败,并显示您所说的错误消息
有可能是这样吗?在您的计算机上尝试此小测试程序:
在两个系统上运行以下命令:
$ perldoc -lm File::Path
这将打印出所包含的File::Path模块的位置。我的怀疑是您没有执行您认为是的File::Path模块
确定实际使用的模块后,检查两个模块是否一致。另外,当你在做的时候,做一个perl-V
(大写V
)。这将为您提供有关Perl安装的大量信息,包括libpath和posix的使用。很可能您使用相同的源代码编译Perl,但编译标志不同
在两个系统上尝试此测试程序:
use strict;
use warnings;
use File::Path;
open (FOO, ">foo") or die qq(Things really aren't going your way\n);
print FOO "THIS\n";
close FOO;
if (my $value = mkpath "foo/foo/bar/foo") {
print "It worked: $value !\n";
} else {
print "It didn't: $value !\n";
}
print "And the program continues\n";
这个应该会失败,因为我正在创建一个文件foo
,然后试图创建一个路径foo/boo/bar/foo
。事实上,我得到了以下错误:
mkdir foo: File exists at ./test.pl line 11
其中一个问题将告诉我们发生了什么。您在两台机器上使用的是相同版本的File::Path吗?它们不是基于Perl版本吗?我们使用的是同一版本的perl,它是一个双生存发行版,因此它可以独立于
perl
进行升级。我从存储库(Perforce)获取perl,我们都同步到同一个存储库,而verionmkdir\NET…
缺少一个\
。我从存储库获取perl(Perforce)我们都同步到同一个存储库verion@Setheron,那么我给出的另一个可能的原因呢?@Setheron,添加了第三个可能的原因。对不起,我得到了mkdir路径:文件存在,但为什么它在我的机器上工作而不是在我的朋友上?值得注意的是,该文件位于网络计算机上,因此目录类似于:“\\network-COMP/Directory1/Directory2”。星期二我要试试这些东西!(星期一是劳动节)