首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

opendir() chdir() 的有关问题

2012-03-17 
opendir()chdir() 的问题C/C++ code#includestdio.h#includedirent.h#includeunistd.h#includesys/

opendir() chdir() 的问题

C/C++ code
#include<stdio.h>#include<dirent.h>#include<unistd.h>#include<sys/stat.h>#include<string.h>void dppath(char *pathname,int num){    struct dirent *dirp;    struct stat buf;    DIR *dp;    int i;    if(chdir(pathname)==-1)                        //[color=#FF0000]1[/color]    {        printf("error or no exist pathname: %s\n",pathname);        return;    }    if((dp=opendir(pathname))==NULL)               //[color=#FF0000]2[/color]    {        printf("don't open :%s\n",pathname);        return;    }        while((dirp=readdir(dp))!=NULL)    {            if(lstat(dirp->d_name,&buf)<0)        {            printf("lstat error\n");            return;        }        if(S_ISDIR(buf.st_mode))        {            if(strcmp(dirp->d_name,".")==0 || strcmp(dirp->d_name,"..")==0)            {                continue;            }             for(i=0;i<num;i++)                printf(" ");            printf("%s\n",dirp->d_name);             dppath(dirp->d_name,num+3);        }        else        {              for(i=0;i<num;i++)                printf(" ");            printf("%s\n",dirp->d_name);         }    }    closedir(dp);    chdir("..");    }int main(int argc,char *argv[]){    int num=3;    if(argc!=2)    {        printf("usage: ftw <starting-pathname>\n");        return 0;    }    if(chdir(argv[1])==-1)    {        printf("error or no exist pathname: %s\n",argv[1]);        return 0;    }    printf("%s\n",argv[1]);    dppath(argv[1],num);    return 0;}




为什么 注解1 和注解 2 标记 的两个if语句换一下位置后运行时,会出现opendir 无法打开目录文件呢 ??

[解决办法]
经过测试是你没有判断目录和文件,所以导致以打开目录的方式来打开文件,会出错,我添加了的代码如下
C/C++ code
  7 void dppath(char *pathname,int num)  8 {  9     struct dirent *dirp; 10     struct stat buf; 11     char  pbuf[32]; 12     DIR *dp; 13     int i; 14     getcwd(pbuf,32); 15     printf("current wd2:%s\n",pbuf); 16     if((dp=opendir(pathname))==NULL)               //[color=#FF0000]2[/color] 17     { 18         printf("don't open :%s\n",pathname); 19         return; 20     if(chdir(pathname)==-1)                        //[color=#FF0000]1[/color] 21     { 22         printf("error or no exist pathname: %s\n",pathname); 23         return; 24     } 25     getcwd(pbuf,32); 26     printf("current wd2:%s\n",pbuf); 27 /* 28     if((dp=opendir(pathname))==NULL)               //[color=#FF0000]2[/color] 29     { 30         printf("don't open :%s\n",pathname); 31         return; 32     } 33 */ 

热点排行