Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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 Open:没有这样的文件或目录_Perl - Fatal编程技术网

Perl Open:没有这样的文件或目录

Perl Open:没有这样的文件或目录,perl,Perl,我试图将目录中的每个文本文件读入一个变量,然后打印前100个字符,包括换行符。然而,Perl说这些文件并不存在,即使它们确实存在 use strict; use warnings; my $dir = "C:\\SomeFiles"; my @flist; open(my $fh, "dir /a:-d /b $dir |") || die "$!"; while (<$fh>) { if ($_ =~ /.*(.txt)$/i) { push(@fli

我试图将目录中的每个文本文件读入一个变量,然后打印前100个字符,包括换行符。然而,Perl说这些文件并不存在,即使它们确实存在

use strict;
use warnings;

my $dir = "C:\\SomeFiles";
my @flist;

open(my $fh, "dir /a:-d /b $dir |") || die "$!";

while (<$fh>) {
    if ($_ =~ /.*(.txt)$/i) {
        push(@flist, $_);
    }
}

foreach my $f (@flist) {
    print "$dir\\$f";
    my $txt = do {
        local $/ = undef;
        open(my $ff, "<", "$dir\\$f") || die "$!";
        <$ff>;
    };
    print substr($txt, 0, 100);
}
使用严格;
使用警告;
my$dir=“C:\\SomeFiles”;
我的@flist;
开放式(my$fh,“dir/a:-d/b$dir |”)| | die“$!”;
而(){
如果($\u=~/.*(.txt)$/i){
推送(@flist,$);
}
}
foreach我的$f(@flist){
打印“$dir\\$f”;
我的$txt=do{
本地$/=undef;

open(my$ff,“一个更好的解决方案是改用readdir()(或者如果您想递归地执行此操作):

my$dir=“C:\\SomeFiles”;
opendir(my$dh,$dir)| | die“$!”;
while(my$file=readdir($dh)){
如果($file=~/\\.txt$/i){
打印$file。“\n”;
我的$txt=do{
本地$/=undef;

open(my$ff,“一个更好的解决方案是改用readdir()(或者如果您想递归地执行此操作):

my$dir=“C:\\SomeFiles”;
opendir(my$dh,$dir)| | die“$!”;
while(my$file=readdir($dh)){
如果($file=~/\\.txt$/i){
打印$file。“\n”;
我的$txt=do{
本地$/=undef;


打开(我的$ff,"注意隐藏的空白:使用
chomp
另外,将整个文件读入内存以便只打印前100个字符是浪费。为什么不使用
read
?@ThisSuitesBlacknot:打印前100个字符是一项示例任务,目的是解释我遇到的问题。我真正的任务涉及整个文档与未解决的问题无关。(错误发生在尝试打开文档时,在尝试将其用于任何用途之前。)哦,你应该这么说!:)至于错误,这就是我对
chomp
发表评论的原因。在尝试打开文件名之前,您没有从文件名中删除行尾字符。您正在尝试打开
C:\SomeFiles\C:\SomeFiles\file1.txt
。注意隐藏的空白:同时使用
chomp
,将整个文件读入内存只打印前100个字符是浪费。为什么不使用
阅读
?@ThisSuitesBlack不:打印前100个字符是一个示例任务,目的是解释我遇到的问题。我真正的任务涉及整个文档,与未解决的问题无关。(错误发生在尝试打开文档时,然后才尝试将其用于任何用途。)哦,你应该这么说!:)至于错误,这就是我对
chomp
发表评论的原因。在尝试打开文件名之前,您没有从文件名中删除行尾字符。您正在尝试打开
C:\SomeFiles\C:\SomeFiles\file1.txt
。您可能应该从
opendir
命令中删除管道符号。感谢您的帮助快速而有用的回答!我做了一些编辑以使其正常工作。我不熟悉File::Find;您能提供一个在这种情况下如何使用它的示例吗?@Alex:如果您需要查看整个目录树,它基本上更强大、更有用。我已经链接了上面文档的URL。您应该WesHardaker:非常感谢,我非常感谢您的帮助。我将签出File::Find。您可能应该从
opendir
命令中删除管道符号。谢谢快速而有用的回答!我做了一些编辑以使其正常工作。我不熟悉File::Find;您能提供一个在这种情况下如何使用它的示例吗?@Alex:如果您需要查看整个目录树,它基本上更强大、更有用。我已经链接了上面文档的URL。您应该我可能会看一下。它比使用
opendir
更复杂,所以除非你需要深入到子目录,否则你应该使用
opendir
。@WesHardaker:非常感谢你的帮助。我会查看File::Find。
C:\SomeFiles\file1.txt
No such file or directory at script.pl line 19, <$fh> chunk 10.
my $dir = "C:\\SomeFiles";

opendir(my $dh, $dir) || die "$!";

while (my $file = readdir($dh)) {
    if ($file =~ /\\.txt$/i) {
        print $file . "\n";
        my $txt = do {
            local $/ = undef;
            open(my $ff, "<", "$dir\\$file") || die "$!";
            <$ff>;
        };
        print substr($txt, 0, 100) . "\n";
    }
}

closedir($dh);