你是工作需要,还是要练习编程呢?
如果是前者,强烈建议你用现成的东西,比你自己写的稳定性什么的都好。
可以试试这个命令:
$ 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);
}