ftp下载文件md5错误

使用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为二进制方式。

你可能感兴趣的:(linux开发)