免费注册 查看新帖 |

Chinaunix

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

还是关于C编程实现复制一个目录的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-05 12:36 |只看该作者 |倒序浏览
前段时间忙着考试,没怎么来。

还是关于这个问题,操作包括下面的所有子目录和文件,说白了,是通过网络进行备份操作的。
有xd贴出了嵌套删除一个目录的程序初稿(感谢),我看了,好像删除的难度比较小,但复制的话不仅要确定文件源,还要确定目的文件。

我设计的操作过程是这样的:目的端(备份端)向源端(服务器端)发出命令,指定要备份的目录。然后源端程序收到命令以后打开目录,并readdir(),如果是文件就用open(),read()读取,再用socket中的send()发送,若是文件夹,重复。而目的端则调用recv(),open(),write()进行粘贴吧。

问题是:一个目录下面有很多文件,我如何在目的端确定要用open()生成的文件的名字,我要write()的文件的名名字?

请大家赐教

论坛徽章:
0
2 [报告]
发表于 2004-07-05 13:56 |只看该作者

还是关于C编程实现复制一个目录的问题

简单回答一下吧。
directory: closedir, opendir, readdir, rewinddir, seekdir, telldir -- directory operations
closedir- closes the named directory stream and frees the DIR structure

opendir- opens a directory

readdir- returns a pointer to the next active directory entry

rewinddir- resets the named directory stream to the beginning of the directory

seekdir- sets the position of the next readdir operation

telldir- returns current location associated with named directory stream


Syntax
cc . . . -lc

#include <dirent.h>;


int closedir(DIR *dirp);

DIR *opendir(const char *dirname);

struct dirent *readdir(DIR *dirp);

void rewinddir(DIR *dirp);

void seekdir(DIR *dirp, long int loc);

long int telldir(DIR *dirp);



Example
Sample code which searches a directory for entry name:
           dirp = opendir( "." );
           while ( (dp = readdir( dirp )) != NULL )
                   if ( strcmp( dp->;d_name, name ) == 0 )
                           {
                           closedir( dirp );
                           return FOUND;
                           }
           closedir( dirp );
           return NOT_FOUND;
文件名字放在d_name中。
但只有这些还是不够的,因为目录中的文件有很多种,但不是所有的都可以被复制。比如设备文件、目录、管道、名字文件都不能被复制。所以在读取之前还要用stat系统调用确定所对应文件的类型。只有规则文件和符号链接是可以被复制的。如果是符号链接还要判断是复制链接本身还是复制被链接的文件,如果被链接的文件也是一个符号链接呢?

论坛徽章:
0
3 [报告]
发表于 2004-07-05 16:24 |只看该作者

还是关于C编程实现复制一个目录的问题

原帖由 "zhaojinbo" 发表:
简单回答一下吧。
directory: closedir, opendir, readdir, rewinddir, seekdir, telldir -- directory operations
closedir- closes the named directory stream and frees the DIR structure

opendir- open..........


楼上讲得比较详细,先谢过了。
可能是我自己没有讲详细吧,其实这部分并不是我说的难点,对文件夹下面子目录和各种文件的分类处理情况我也明白。
我现在想请教的是,我怎么在目的端建立起与源端对应的子目录和文件(就假设都是常规文件吧),然后在源端结束一个文件的传输,打开下一个文件并开始下一个文件传输的时候,目的端能够对应的结束上一个文件的传输,建立起下一个对应的文件并开始接受数据。如此一直下去。

论坛徽章:
0
4 [报告]
发表于 2004-07-05 16:49 |只看该作者

还是关于C编程实现复制一个目录的问题

传名字、文件大小

论坛徽章:
0
5 [报告]
发表于 2004-07-05 20:48 |只看该作者

还是关于C编程实现复制一个目录的问题

[quote]原帖由 "FH"]传名字、文件大小[/quote 发表:

嗯,应该是要这样的--至少要传文件名
可是能不能说得具体可操作性强一些呢?

我是这样想的,我在目的端指定目录,源端收到后扫描整个目录,把每个文件和子目录的信息用一个数据结构记录,通过socket把所有数据结构都传输到目的端,然后目的端再形成一个文件属性列表。目的端通过依次读取这个文件属性列表依次生成生成文件,并向源端发出命令,要求复制某指定文件。

这样操作是不是太麻烦了?唉,有些头晕,盼高人指点。

论坛徽章:
0
6 [报告]
发表于 2004-07-06 09:23 |只看该作者

还是关于C编程实现复制一个目录的问题

不用啊,源读到一个文件,就把名字和大小送给目的端,然后是分包传递文件内容。

论坛徽章:
0
7 [报告]
发表于 2004-07-06 14:29 |只看该作者

还是关于C编程实现复制一个目录的问题

其实你要开发一套协议,解决目录内容的传输和文件内容的传输。

论坛徽章:
0
8 [报告]
发表于 2004-07-06 15:26 |只看该作者

还是关于C编程实现复制一个目录的问题

[quote]原帖由 "zhaojinbo"]其实你要开发一套协议,解决目录内容的传输和文件内容的传输。[/quote 发表:


说的好像有道理,其实真的也差不多是这样了
双方按约定的格式进行通信
晕,比想象中要难不少

不知道有哪位大哥做过类似工作的,请再给点比较详细的启示吧

论坛徽章:
0
9 [报告]
发表于 2004-07-06 18:49 |只看该作者

还是关于C编程实现复制一个目录的问题

用tar加上管道/套接字就行了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP