使用ftp下载文件时出现md5和源文件不同的错误,后来搞了半天才弄清原来是传输模式的原因:
文件传送有两种方式,即ASCII码和二进制码。ASCII方式传送略快些,但要求被传送文件必须是ASCII码文本文件。二进制码方式可以传送 文本和非文本,因此,对所有文件传送都可以用二进制方式。输入命令ascii,设置为ASCII方式。输入命令binary为二进制方式。
设置文件的传输方式:
二进制传输:
ftp>binary //把传输模式转换一下
ftp>put putty.exe
ascII传输:
ftp>ascii //把传输模式转换成ascII模式
ftp>put hello.txe
下面是修改过的C代码:
int get_file() { FILE *fp; fp = popen("ftp -n","w"); if(fp == NULL) return 1; fprintf(fp, "open %s/n","ipaddr"); fprintf(fp, "user %s %s/n", "username", "passwd"); //关闭交互,在下载过程中不会弹出提示"[y/n]" fprintf(fp, "prompt/n"); /*使用二进制传输, 使用ascii传输文本文件会快些, 但传输例如*.exe非文本文件的时候可能出错,md5也对不上//*/ fprintf(fp, "binary/n"); fprintf(fp, "get downname savename/n"); fprintf(fp,"bye/n"); fclose(fp); return 0; }
2011-04-27 15:44:32
以下文章摘自:http://guoyueheng148.blog.163.com/blog/static/6016709120111119241132/
ftp 登陆成功后,需要下载远程单个文件时,使用get命令。
*********************************************************************
格式:get remote-file [local-file]
说明:
remote-file 指定要复制的远程文档?
Local-file 指定要在本地电脑上使用的名称?假如没有指定,文档将默认命名为 remote-file?
**********************************************************************
megt可以取多个文件,支持通配符。
格式:mget remote-files [ ...]
说明:remote-files 指定要复制到本地电脑的远程文档?
在 mget的时侯,需要对每一个文件都选择y/n,如果向不交互的下载全部的文件,可以先用prompt命令关掉交互方式.然后就可以了。
注意:mput和mget命令要注意两个问题:
(1)、不能对目标文件指定命字,在命令行上所有的文件都视做源文件
(2)、mput,mget两个命令不能对目录进行上传下载,只能对文件
************************************************************************
prompt:【提示】设置多个文件传输时的交互提示。每执行一次这个命令,就在prompt on 和 prompt off直接切换。处于prompt off状态时,使用mget 和 mput命令不需要y/n直接交互选择确认键。
ftp>prompt
切换交谈式指令(使用mput/mget 时不用每个文件皆询问yes/no)
ftp> help prompt
prompt force interactive prompting on multiple commands
ftp> prompt
Interactive mode off.
ftp> prompt
Interactive mode on.
ftp> prompt
Interactive mode off.
ftp>
**************************************************************************
设置文件的传输方式:
二进制传输:
ftp>binary //把传输模式转换一下
ftp>put putty.exe
ascII传输:
ftp>ascii //把传输模式转换成ascII模式
ftp>put hello.txe
**注:文件传送有两种方式,即ASCII码和二进制码。ASCII方式传送略快些,但要求被传送文件必须是ASCII码文本文件。二进制码方式可以传送 文本和非文本,因此,对所有文件传送都可以用二进制方式。输入命令ascii,设置为ASCII方式。输入命令binary为二进制方式。