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

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");?

}