免费注册 查看新帖 |

Chinaunix

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

求助,c语言读写文件夹 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-14 16:11 |只看该作者 |倒序浏览
各位好:

    在redhat5上实现一个程序,将一个文件夹完整的拷贝到另一个地方,目前实现了文件夹文件的类型判断,请问如何读写文件夹?难道一定要使用mkdir创建吗?按照apue的说法,文件夹也是一个文件,如何读写,我试过用fread和read都不能读。

   下面的代码,作用是遍历文件夹,统计普通文件和文件夹的项数,请指教。

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>

int Mydir(char *filepath);

int main(int argc, char *argv[])
{
        char *path;
        if(argc!=2)
        return 1;

        path=argv[1];
        Mydir(path);

        return 0;
}

int Mydir(char *filepath)
{
        char *fullpath,*filetype,*tmp;
        struct stat statbuf;
        DIR *dr;
        struct dirent *drt;

        if((dr=opendir(filepath))==NULL)
        return 2;
               
        while((drt=readdir(dr))!=NULL)
        {
         if(strcmp(drt->d_name,".")==0||strcmp(drt->d_name,"..")==0)
                continue;
        fullpath=strdup(filepath);
        fullpath=strcat(fullpath,"/");
        fullpath=strcat(fullpath,drt->d_name);
       
        if(stat(fullpath,&statbuf)<0)
        return 3;
       
        if (S_ISREG(statbuf.st_mode))
        {
                filetype="reguler";
                printf("%s,%s\n",fullpath,filetype);
        }
        else if(S_ISDIR(statbuf.st_mode))
                {
                        filetype="directory";
                        //fullpath=strcat(fullpath,"/");
                        printf("%s,%s\n",fullpath,filetype);
                        tmp=strdup(fullpath);
                        Mydir(tmp);
                }
        else
        {
                filetype="invalid";
                printf("%s,%s\n",fullpath,filetype);
        }
        //printf("%s,%s\n",fullpath,filetype);
        bzero(fullpath,strlen(fullpath));
        }
        return 0;
}

论坛徽章:
0
2 [报告]
发表于 2009-09-14 17:24 |只看该作者
读写文件夹的意思是?

论坛徽章:
0
3 [报告]
发表于 2009-09-14 17:39 |只看该作者
把一个文件夹拷贝到另外一个地方,比如/root/test文件夹下一个有一个文件名为a.txt和一个空文件夹dir,想要把/root/test/文件夹下的所有内容拷贝到/usr/下,可以使用读写函数把普通文件a.txt复制过去,但是dir文件夹怎么复制过去呢?使用C语言如何实现?

[root@sqlmaster zcl]# ll
total 16
-rw-r--r-- 1 root root    4 Sep 14 17:25 a.txt
drwxr-xr-x 2 root root 4096 Sep 14 17:24 dir

论坛徽章:
0
4 [报告]
发表于 2009-09-14 17:44 |只看该作者

回复 #3 zcldhd 的帖子

哦 这个期待大牛的出现

不过c语言里也有移动、复制文件和目录的函数,也有创建目录的函数,为什么不用复制的函数将/root/test/文件夹下的所有文件和目录(内容)拷贝到/usr/下 !

论坛徽章:
0
5 [报告]
发表于 2009-09-14 17:49 |只看该作者
我最终的目的是想通过socket将整个文件夹写到另外一台机器上。貌似有点麻烦。

论坛徽章:
0
6 [报告]
发表于 2009-09-14 17:54 |只看该作者
读文件夹可以使用 readdir, 写文件夹的话就没听说过了(排除mkdir)。
通过socket 不就是 tar cf - *  | tar xf - 这样了。

论坛徽章:
0
7 [报告]
发表于 2009-09-14 19:53 |只看该作者
打个包用socket传过去,在解压

论坛徽章:
0
8 [报告]
发表于 2009-09-15 09:18 |只看该作者
看来只好如此了。

论坛徽章:
0
9 [报告]
发表于 2009-09-15 09:28 |只看该作者
如果在同一个文件系统,只需要把文件夹的entry项复制过去就行了,相当于制作硬连接
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP