【发布时间】:2013-06-27 15:53:40
【问题描述】:
我遇到readdir 没有实际读取给定文件夹中的所有文件的问题。我只看到以下三个文件和一个文件夹:
main.cpp
main.hpp
imageLoader.hpp
util
同时,如果我使用 bash ls -lat,我会列出以下文件:
drwxrwxr-x 11 me me 4096 Jun 30 10:48 ..
-rw-rw-r-- 1 me me 7797 Jun 30 10:19 main.cpp
-rw-rw-r-- 1 me me 690 Jun 30 10:18 crate.hpp
-rw-rw-r-- 1 me me 2691 Jun 30 10:18 crate.cpp
drwxrwxr-x 2 me me 4096 Jun 30 00:02 util
drwxrwxr-x 3 me me 4096 Jun 29 23:37 .
-rw-rw-r-- 1 me me 2584 Jun 22 19:38 imageLoader.cpp
-rw-rw-r-- 1 me me 333 Jun 22 12:56 imageLoader.hpp
-rw-rw-r-- 1 me me 52 Jun 16 17:03 main.hpp
我使用的代码并没有太疯狂(经过编辑以保持相关性):
opendir FOLDER, $folder or die "failed to open";
FILELOOP: while (readdir FOLDER){
next if /^\.\.?$/; # I do have to manually skip these right?
print "$_\n";
}
我不明白为什么当我运行我的程序时它没有显示文件夹的最新内容。我有权查看这些文件,对我的脚本报告的文件和未报告的文件具有相同的权限。我有这个工作,似乎我在某个地方改变了一些东西来打破这个。
【问题讨论】:
-
无法重现:
mdkir test; cd test; touch crate.{c,h}pp imageLoader.{c,h}pp main.{c,h}pp util; cd ..; perl your-script其中$folder设置为test。它产生预期的输出。 — 循环中是否还有其他代码可以last或return? -
我确实有一段代码会排除文件,但它没有打印任何内容。但这只是使用
next,并没有被触发。 -
当你运行那段 Perl 代码时,比如
perl -e'$folder="."; rest_of_code_you_have_shown',你应该会看到预期的输出。你能确认这是否有效吗?如果该示例有效,但您的真实脚本无效,则问题可能出在脚本的其他部分,例如你的排除逻辑。 -
嗯...看来我没有得到我最初预期的行为。我也在递归地使用这个函数来搜索子文件夹,但是一旦进入文件夹,它似乎就不再搜索文件夹了