免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1507 | 回复: 1
打印 上一主题 下一主题

opendir 不能打开怎么解决,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-14 11:16 |只看该作者 |倒序浏览
开始执行时用的是/home文件夹,所以打开的目录流很多,由于显示太乱,中途强行中止程序执行了,可能因为这样closedir()还没执行,导致现在执行时出现不能打开的现象,
[heixia@localhost program]$ ./printdir
Directory scacn of /home/program:
cannot open directory: /home/program
done.

请问可以怎么解决,谢谢
(应该只要把打开的文件流关闭就行了,怎么关?)

源程序
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>

void printdir( char *dir,int depth )
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIR  *dp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct dirent *entry;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct stat statbuf;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( ( dp = opendir( dir ) ) == NULL ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf( stderr,"cannot open directory: %s\n",dir );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chdir( dir );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while( ( entry = readdir( dp ) ) != NULL ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lstat( entry->d_name,&statbuf );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( S_ISDIR( statbuf.st_mode ) ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( strcmp( "." ,entry->d_name)== 0 ||
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcmp( ".." ,entry->d_name)== 0 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf( "%*s%s/\n",entry->d_name );

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printdir( entry->d_name,depth + 4 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else printf( "%*s%s\n",depth,"",entry->d_name );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chdir( ".." );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closedir( dp );
}

int main(  )
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf( "Directory scacn of /home/program:\n" );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printdir( "/home/program",0 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf( "done.\n" );

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}

论坛徽章:
0
2 [报告]
发表于 2008-03-14 11:29 |只看该作者
不好意思,路径打错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP