2012-09-14 49 views
4

我正在研究一個perl腳本,它爲我們的網絡上的一些根目錄開始的所有目錄中的pdfs執行文檔清單。該腳本在本地運行良好,但我無法從網絡驅動器讀取文件。我已經strawberryperl在Perl中從網絡驅動器讀取文件

這是

use strict; 
use Excel::Writer::XLSX; 
use Cwd; 
use Tk; 
use File::Find; 

my @analystreports; 
my @directories; 

我用Tk的GUI來獲取目錄

my $homeDir = Tk::MainWindow->new->chooseDirectory; 

捕獲所有文件和文件夾在當前目錄下的我的代碼開始

find(\&grabPDF, $homeDir); 

sub grabPDF { 

    my $file = $_; 
    if ($file =~ /\.pdf/g) { 

     push @analystreports, $File::Find::name; 
    } 
} 

我的網絡驅動器看起來像這樣在網絡使用

本地N:遠程\ abc-file-01 \共享數據

請原諒我的初學者代碼。我的問題是我是否在網絡驅動器上做錯了什麼,或者我是否需要向管理員諮詢權限。謝謝你,丹

+0

當你說你無法讀取文件時,這是什麼意思?你有錯誤信息嗎?如果是這樣,那麼錯誤信息是什麼?我也不明白你的意思是「我的網絡驅動器看起來像這樣......」你能澄清一下嗎?你有你的網絡驅動器映射到本地驅動器號? – David

+0

當然,網絡驅動器映射到字母n。該計劃也只是無休止地運行。沒有錯誤信息。我感謝你的幫助 – user1671813

+0

無盡的,或很長一段時間?您正在從您所說的內容中掃描整個驅動器。這可能需要一段時間! – ikegami

回答

1

驅動器是一個驅動器。您可以通過以下任一字符串:

N:\ 
n:\ 
N:/ 
n:/ 

您甚至可以傳遞UNC名稱。

\\abc-file-01\shared data 
//abc-file-01/shared data 

當然,您可能必須使用一些轉義來構建字符串。

"N:\\" 
"N:/" 
"n:\\" 
"n:/" 
"\\\\abc-file-01\\shared data" 
"//abc-file-01/shared data" 

但既然你似乎正從傳統知識字符串,而不是建立它這可能是不相關的。

代碼中存在一個錯誤。

if ($file =~ /\.pdf/g) { 

應該

if ($file =~ /\.pdf/) { 

,可能

if ($file =~ /\.pdf\z/) { 

g是沒有意義的存在,並可能導致的問題(雖然我覺得你的特定代碼不吃虧)。擺脫g

+0

感謝您的幫助。你爲什麼認爲它需要逃避這個驅動器而不是本地?我嘗試了所有其他組合。感謝您對g的建議。 – user1671813

+0

@ user1671813,什麼? – ikegami

+0

我的意思是,他們的方式,我有它編碼的作品,當我選擇我的硬盤驅動器上的任何文件夾。只是不在網絡驅動器上。我不明白爲什麼我不得不改變路徑格式化的方式,如果是這樣的話。 – user1671813