Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Perl从网络驱动器读取文件_Perl_Networking_Drive_File Find - Fatal编程技术网

用Perl从网络驱动器读取文件

用Perl从网络驱动器读取文件,perl,networking,drive,file-find,Perl,Networking,Drive,File Find,我正在编写一个perl脚本,它从网络上的某个根目录开始,为所有目录中的PDF编制文档清单。脚本在本地运行良好,但我无法让它从网络驱动器读取文件。我有草莓 这是我代码的开始 use strict; use Excel::Writer::XLSX; use Cwd; use Tk; use File::Find; my @analystreports; my @directories; 我使用TKGUI获取目录 my $homeDir = Tk::MainWindow->new->

我正在编写一个perl脚本,它从网络上的某个根目录开始,为所有目录中的PDF编制文档清单。脚本在本地运行良好,但我无法让它从网络驱动器读取文件。我有草莓

这是我代码的开始

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

my @analystreports;
my @directories;
我使用TKGUI获取目录

my $homeDir  = Tk::MainWindow->new->chooseDirectory;
find(\&grabPDF, $homeDir);

sub grabPDF {

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

        push @analystreports, $File::Find::name;
    }
}
捕获当前目录中的所有文件和文件夹

my $homeDir  = Tk::MainWindow->new->chooseDirectory;
find(\&grabPDF, $homeDir);

sub grabPDF {

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

        push @analystreports, $File::Find::name;
    }
}
我的网络驱动器在网络使用中看起来像这样

本地N:Remote\abc-file-01\共享数据


请原谅我的初学者代码。我的问题是,我的网络驱动器是否有问题,或者我是否必须向管理员请求权限。谢谢你,丹。开车就是开车。您可以传递以下任意字符串:

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"
但这可能不相关,因为您似乎是从Tk获取字符串,而不是构建它

你的代码中有一个bug

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

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

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

g
在这里毫无意义,可能会导致问题(尽管我认为您的特定代码不会受到影响)。摆脱
g

当你说你不能让它读取文件时,那是什么意思?你收到错误信息了吗?如果是,错误消息是什么?我也不明白你所说的“我的网络驱动器看起来像这样…”是什么意思,你能澄清一下吗?是否将网络驱动器映射到本地驱动器号?当然,网络驱动器映射到字母n。此外,该程序只是无休止地运行。没有错误消息。我感激你的无奈,还是很长时间?你正在根据你说的扫描整个驱动器。那可能需要一段时间!这是无止境的。所花的时间毫无意义。我只是在看一个文件夹。我的本地计算机上有相同的文件夹,它可以在半秒钟内工作。该文件夹有任何文件夹或符号链接吗?您正在递归搜索。为什么不将
warn($\ux)
添加到回调子节点以跟踪其进度?
chooseddirectory
返回什么?感谢您的帮助。为什么你认为它需要逃走而不是当地人?我试过所有其他的组合。谢谢你对g的建议。我的意思是,当我选择硬盘上的任何文件夹时,他们的编码方式都是有效的。只是不在网络驱动器上。如果是这样的话,我不明白为什么我必须改变路径的格式化方式。你不明白。路径根本不应该更改。非常感谢您的帮助。你让我添加警告(美元)是对的,只是在网络上花了很长时间!