Perl Open:没有这样的文件或目录
我试图将目录中的每个文本文件读入一个变量,然后打印前100个字符,包括换行符。然而,Perl说这些文件并不存在,即使它们确实存在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
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);