2010-07-01 98 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路徑是大小寫敏感的 - 抓住我出去