2010-07-01 74 views
2

你将如何探索和写入到perl中的windows共享目录? 注意:我无权在相关工作站上创建网络驱动器。 我试图(无结果)执行以下操作:如何在Windows中从Perl访问网络共享?

my $ROOTDIR1 = 'c:/'; 
my $ROOTDIR2 = '//server/dir1/dir2/'; 
sub dtest { 
    my $ROOTDIR = shift; 
    warn "Testing '$ROOTDIR'."; 
    opendir(SHAREFILE, "$ROOTDIR") or warn "1 -> " . $!; 
    my @files = <$ROOTDIR*>; 
    warn ("2 -> nothing !") if (!scalar @files); 
    chdir $ROOTDIR or warn "3 -> " . $!; 
} 
dtest($ROOTDIR1); 
dtest($ROOTDIR2); 

但是如由下面的输出:

Testing 'c:/'. at E:\test\a.pl line 5. 
Testing '//server/dir1/dir2/'. at E:\test\a.pl line 5. 
1 -> No such file or directory at E:\test\a.pl line 6. 
2 -> nothing ! at E:\test\a.pl line 8. 
3 -> No such file or directory at E:\test\a.pl line 9. 

的那些方法没有正在工作。

有什么想法?

回答

4

UNC路径适用于我,在ActivePerl 5.12.1和Cygwin Perl 5.10.1中顺利运行。我首先会猜想没有路径'//server/dir1/dir2',我只能认为你传递的内容不是合理的UNC路径,无论你在哪里尝试获取。

  • 除了这个,它是否超时,也许?我知道,如果您没有将驱动器映射到Windows中的特定共享位置,它可能是一个尝试使用裸露的UNC路径启动网络共享的承担,但通常需要几分钟的时间才能加载到资源管理器中。

  • 另一件需要检查的可能是这是一个共享,需要您在连接时输入密码。我不确定Perl是否覆盖了Windows中的签名过程。也许你的网络共享只响应那些知道如何回答服务器给他们的挑战的程序。

+0

如你所说,我的路径不是合法的UNC路径:有一个正确的分配问题。 谢谢 – 2010-07-01 13:32:32

0

UNC路径应该有反斜杠。

+2

至少在ActiveState的Perl的,事实并非如此。它将前斜杠映射到反斜杠,以便像我这样的Unix人不必重新训练我们的大脑。 – 2010-07-01 11:49:32

+0

好吧,我怀疑只适用于传统文件路径,但无法尝试缺少Windows。感谢您的确认。 – daxim 2010-07-01 12:58:06

1

的UNC路径是大小写敏感的 - 抓住我出去