URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 34 » 如何在Linux下用C++实现读取整个目录的网络传输
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
如何在Linux下用C++实现读取整个目录的网络传输
 
 
 
 
 
 
 
 
Subject: 如何在Linux下用C++实现读取整个目录的网络传输
Author: wythz    Posted: 2005-04-24 14:48    Length: 507 byte(s)
[Original] [Print] [Top]
需求:
客户端向服务器传送整个目录内的文件(目录内有子目录,子目录下有文件),将这些文件传送到服务器上一个相同的目录名(子目录极其文件名称都一样)。

我自己写了一个文件传输的程序,是从一个文本文件里按行读取文件名,然后将文件传送到服务器。现在的问题是如何将整个目录内的路径关系保存到这个文本文件,同时在服务器端要能自动的创建新的目录及子目录呢?

我知道创建目录需要的函数有mkdir。可以通过ls -R -1将目录内容保存到一个文本里。不知道这样做下去可不可行。。。
[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: alula    Posted: 2005-04-24 16:38    Length: 128 byte(s)
[Original] [Print] [Top]
有现成的可用
www.BitTorrent.com
----
温故知新
[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: Atu    Posted: 2005-04-24 18:42    Length: 185 byte(s)
[Original] [Print] [Top]
不要写程序
用现成的东西,如rsync

或者看看scp是否支持目录树的复制

或者client端用tar打包,通过ssh管道传送到server端,在通过tar解包
[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: wythz    Posted: 2005-04-25 09:34    Length: 18 byte(s)
[Original] [Print] [Top]
这个是bt吧。。。。
[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: wythz    Posted: 2005-04-25 09:36    Length: 119 byte(s)
[Original] [Print] [Top]
可是我前面已经写了一些程序了。。。
不知道用自己的程序如何解决这样的问题,去参考一下rsync的代码应该会有所帮助吧
[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: Atu    Posted: 2005-04-25 09:57    Length: 1,826 byte(s)
[Original] [Print] [Top]
你是工作需要,还是要练习编程呢?
如果是前者,强烈建议你用现成的东西,比你自己写的稳定性什么的都好。

可以试试这个命令:

$ cd source_dir
$ tar cf - . | ssh -l user server `(cd /dest_dir; tar xf - )'
只要server和client端支持ssh即可

如果是自己写程序,可能就要设计一个传输协议了
Client端发送一个文件名,再发送文件内容;再发送一个文件名,再发送一个文件内容
但是每个信息都要包括自己的长度

至于遍历目录,很多书都讲过了
或者递归如下

void do_process(char *s)
{
open_dir(s);
for_each(i in s/每个文件或目录)
{
if ( i is directory )
do_process(i);
else if ( i is file )
copy_to_server(i);
else if ( i is other ) // link ?
.....;
}
close_dir(s);
}

或者自定义一个栈,这个方法比递归好一点

stack <string> s;
s.push_back(current_dir);

while ( ! s.empty() )
{
string current = s.front();
s.pop_front();

open_dir(current);
for_each( i in current/每个文件或目录 )
{
if ( i is directory )
s.push_back(i);
else if ( i is file )
copy_to_server(i);
else if ( i is other ) // link ?
......
}
close_dir(current);
}

[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: alula    Posted: 2005-04-25 13:40    Length: 12 byte(s)
[Original] [Print] [Top]
或者 man ftw
----
温故知新
[Original] [Print] [Top]
Subject: Re: 如何在Linux下用C++实现读取整个目录的网络传输
Author: wythz    Posted: 2005-04-25 17:30    Length: 193 byte(s)
[Original] [Print] [Top]
恩,也不算是工作需要。

我前面写的传送文件的程序就是这样,先传送文件名,然后传送文件,一个一个来。

我看一下ftw()好像是专门遍历目录的哦。学习一下先
[Original] [Print] [Top]
« Previous thread
碰到“dereferencing pointer to incomplete type”错误
C/C++编程版
34
Next thread »
请教编译生成文件大小问题
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:59, cost 0.042290925979614 ms.