LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1499|回复: 9

[求助]opendir() 为什么打不开目录??

[复制链接]
发表于 2006-4-28 23:00:54 | 显示全部楼层 |阅读模式
在拷贝某个文件夹下的所有所有文件的程序中,出现错误。

在程序中用箭头指出来的地方,就是opendir() 的位置。一运行就提示 printf() 输出的语句 “open directory error!”也就是说打不开制定的文件夹 argv[1]

程序如下:


  1. #include <unistd.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <errno.h>
  7. #include <string.h>

  8. void cpfiles(char *src,char *des,char name[])

  9. int main(int argc,char *argv[])
  10. {
  11.       struct stat attrib;
  12.       struct dirent *fname;
  13.       int n;      
  14.       DIR *dp;

  15.       if(argc!=3)

  16.        {

  17.          fprintf(stderr,"Usage: %s fromfile tofile\n\a",argv[0]);

  18.          exit(1);

  19.        }


  20.       lstat(argv[1],&attrib);

  21.       if(S_ISDIR(attrib.st_mode))
  22.       {
  23.           for(n=0; ; )
  24.           {
  25.     ——〉     if((dp=opendir(argv[1]))==NULL)  〈——
  26.                      fprint("open directory error!\n");
  27.             
  28.               seekdir(dp,n++);
  29.             
  30.               if((fname=readdir(dp))==NULL);

  31. ..........................这个 for 循环还很长的.遇到合适的条件就会 break 出去..后面的就省略了哦
复制代码

后来又写了一个测试小程序,:

  1. #include <unistd.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <errno.h>
  7. #include <string.h>

  8. int main(int argc,char *argv[])
  9. {
  10.         DIR *dp;

  11.         if((dp=opendir(argv[1]))==NULL)
  12.                   fprint("open directory error!\n");

  13.         return0;
  14. }
复制代码

运行没错!

这两个程序“./”时设置的路径参数,也就是将要被拷贝的源文件夹路径完全一样,可是上面那个程序opendir 出错,而下面的测试程序却没有!!

不知道是不是在对 argv[1]作的属性操作影响了后面的打开呢?

请大家帮忙看看啦!多谢多谢~~
发表于 2006-4-29 08:43:49 | 显示全部楼层
http://www.linuxfans.org/nuke/mo ... eninfo&did=3299
看看这个程序.
有你需要的东西.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-29 10:34:33 | 显示全部楼层

这是个么呀??

先下下来看看~~
谢谢咯!
回复 支持 反对

使用道具 举报

发表于 2006-4-29 10:48:02 | 显示全部楼层
我觉得opendir时,必须对那个目录据有读权限,你确信那个目录有读权限吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-29 11:19:29 | 显示全部楼层
有读写权限的!下面那个测试程序成功了(也就是能打开源路径),而且这上下两个程序的参数,argv[1] 和 argv[2]完全相同,没理由下面那个程序能打开,但上面那个打不开阿。
真是头疼哟
回复 支持 反对

使用道具 举报

发表于 2006-4-29 13:49:55 | 显示全部楼层
  1. for(n=0; ; )
  2.              {
  3.     ——〉     if((dp=opendir(argv[1]))==NULL);  〈——
  4.                   fprint("open directory error!\n");
复制代码



搜索目录的方法是错误的......
你的程序在不停的打开argv[1]这个目录.
回复 支持 反对

使用道具 举报

发表于 2006-4-29 16:16:35 | 显示全部楼层
你的程序好像不对。
你的if(...);这条语句后怎么有一个分号(;)啊,这不就是不管opendir能否成功执行,下面的fprinrf(...)
都要执行吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-29 16:45:06 | 显示全部楼层
忘记改了,把分号删了 也还是一样
回复 支持 反对

使用道具 举报

发表于 2006-4-29 16:54:32 | 显示全部楼层
opendir()是在for循环当中,输出得着个错误是在第几次循环啊?

我想这很重要吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-29 21:21:35 | 显示全部楼层
楼上说的是 !!我在这个printf 里面顺便输出n 的值看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表