3 回答

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
最近也遇到了這個(gè)問題,但是有些想不通,chdir(dir)后續(xù)的程序,并沒有更改某個(gè)量,readdir還是獲取的dir的目錄流,和進(jìn)入該目錄有什么關(guān)聯(lián)嗎

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
因?yàn)闉榱俗尦绦蜃兊脺?zhǔn)確可行。
1、chdir("..");是為了在遞歸完某一子目錄后,退回到其父目錄繼續(xù)遍歷后續(xù)的普通文件或其他子目錄;如果缺少這一語句,那么while循環(huán)中的遞歸printdir將會(huì)把父目錄中后續(xù)的普通文件當(dāng)作目錄來操作,從而造成“無法打開目錄”這種錯(cuò)誤。
2、chdir(dir);是為了在程序剛運(yùn)行時(shí)進(jìn)入指定的目錄,以及接下來遞歸時(shí)進(jìn)入相應(yīng)子目錄;
用`pwd`提取的絕對路徑。
[gag@genomic-server tmp]$ more test1
#!/usr/bin/perl -w
# script name is test
use strict;
my $d="/home/gag";
my $now=`pwd`;
print $now,"\n";
chdir $d;
print `pwd`;print `ls`;
`touch iamhere`;
print "#######################\n";
chdir $now;print `pwd`;
`touch iamherethen`;
[gag@genomic-server tmp]$ perl test1
/home/gag/perl/tmp
/home/gag
c
cpp1
cpp2
java
perl
shell
tools
#######################
/home/gag
[gag@genomic-server tmp]$ ls
test1
[gag@genomic-server tmp]$ ls ../../
c cpp1 cpp2 iamhere iamherethen java perl shell tools

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
chdir(dir);是為了在程序剛運(yùn)行時(shí)進(jìn)入指定的目錄,以及接下來遞歸時(shí)進(jìn)入相應(yīng)子目錄;
chdir("..");是為了在遞歸完某一子目錄后,退回到其父目錄繼續(xù)遍歷后續(xù)的普通文件或其他子目錄;如果缺少這一語句,那么while循環(huán)中的遞歸printdir將會(huì)把父目錄中后續(xù)的普通文件當(dāng)作目錄來操作,從而造成“無法打開目錄”這種錯(cuò)誤。
【以上只是個(gè)人觀點(diǎn),但愿能幫到你^_^】
添加回答
舉報(bào)