C语言实现从FTP下载、上传文件

C语言实现从FTP下载、上传文件,第1张

1.C语言可以使用CStdioFile函数打开本地文件。使用类CInternetSession 创建并初始化一个Internet打开FTP服务器文件。

  CStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件。

流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件。当你读一个文件时,字节对(0x0D,0x0A)被翻译为一个字节(0x0A)。

CStdioFile 不支持Duplicate,LockRange,和UnlockRange 这几个CFile 函数。如果在CStdioFile 中调用了这几个函数,将会出现CNoSupported 异常。

使用类CInternetSession 创建并初始化一个或多个同时的Internet 会话。如果需要,还可描述与代理服务器的连接。

如果Internet连接必须在应用过程中保持着,可创建一个类CWinApp的CInternetSession成员。一旦已建立起Internet 会话,就可调用OpenURL。CInternetSession会通过调用全局函数AfxParseURL来为分析映射URL。无论协议类型如何,CInternetSession 解释URL并管理它。它可处理由URL资源“file://”标志的本地文件的请求。如果传给它的名字是本地文件,OpenURL 将返回一个指向CStdioFile对象的指针。

如果使用OpenURL在Internet服务器上打开一个URL,你可从此处读取信息。如果要执行定位在服务器上的指定的服务(例如,HTTP,FTP或Gopher)行为,必须与此服务器建立适当的连接。

2.例程:

#include <winsock.h>

#include <stdio.h>

WORD wVersionRequested

WSADATA wsaData

char name[255] //name里是本机名

CString ip //本机IP

PHOSTENT hostinfo

wVersionRequested = MAKEWORD( 1, 1 )

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )

{

if( gethostname ( name, sizeof(name)) == 0)

  {

if((hostinfo = gethostbyname(name)) != NULL)

{

ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list)

}

}

WSACleanup( )

}  

// AfxMessageBox(name)//name里是本机名

// AfxMessageBox(ip) //ip中是本机IP

CStdioFile File

File.Open("C://ip.txt",CFile::modeCreate|CFile::modeReadWrite)

//如果文件事先不存在的话,就需要CFile::modeCreate,否则就不需要。

File.WriteString(ip+":"+"8000")

File.Close()  //注意,这里一定要把文件关闭,否则不能成功上传

CString host="204.45.67.11"  

  CString user="19337"  

  CString password="1234567"  

  TRACE(":%s:%s:%s:%s/n", host,   

user, password, "C://ip.txt")  

  CInternetSession session  

(AfxGetApp()->m_pszAppName)  

  CFtpConnection* pConn = NULL  

  pConn = session.GetFtpConnection (host,user,password)  

  if (pConn) {  

if (!pConn->PutFile("C://ip.txt","ip.txt"))

{  

MessageBox("传送文件失败??")  

} else {  

MessageBox("传送文件成功!")  

}  

pConn->Close()  

delete pConn  

session.Close()  

  } else {  

MessageBox("Cannot Connect")  

  }

题主你好,

从服务器上下载文件或向服务器上传文件最常用的命令当属scp了,使用方法也简单.

一.先说题主问题中的情况,即从服务器上往回拿文件(官话一点的表达:从服务器上将文件下载到本地):

scp 服务器用户名@服务器ip:文件的绝对路径 要将文件保存到本地哪

举例来说,我的服务器地址是1.1.1.1,用户名为hellofriend,并且在服务器上的/home/hellofriend/下有个名为ok的文件,则我想将服务器上的这个ok文件下载到本地的根目录,/,下用到的命令为:

scp hellofriend@1.1.1.1:/home/hellofriend/ok /

命令执行完成后,会提示你输入hellofriend这个用户的密码,密码输入完成后,回车,正常情况下,你在根目录下就能看到ok文件了.

*.新手注意事项:

a.ip地址和文件路径中间有个冒号

b.文件路径一般用绝对路径,即从根开始找

c.不要忘了写你要将文件保存在本地的哪里

-----

二.再说如何将本地文件上传到服务器,这个不细说,命令和上面的差不多:

scp 本地的文件路径 服务器用户名@服务器ip:要保存在服务器的哪个位置

如我要将本地根目录下的ok文件上传到1.1.1.1这台服务器的/home/hellofriend目录下,则命令为:

scp /ok [email protected]:/home/hellofriend/

执行命令后,输入密码,回车,正常情况下文件就上传成功了.

-----

写在最后: 上面命令写的其实相对死板一些,其实还有一些小技巧,题主用的多了就能了解了,这里先不过多展开.

=====

希望可以帮到题主, 欢迎追问.

先后使用InternetOpen和InternetConnect打开连接。使用CreateFile函数打开本地文件。使用FtpOpenFile函数打开远程文件。分别使用InternetReadFile和ReadFile函数读取

FTP

或本地文件。分别使用InternetWriteFile和WriteFile函数写入

FTP

或本地文件。使用CloseHandle函数关闭本地文件句柄。使用InternetCloseHandle函数关闭

FTP

文件句柄。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12012146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存