‘壹’ c# 如何读取ftp上的text文件
使用Inet控件进行FTP操作
Inet1.Protocol = icFTP
Inet1.RemoteHost = p_ServerName ' 服务器IP或者域名
Inet1.RemotePort = CInt(p_ServerPort) 'FTP端口
Inet1.UserName = uName 'FTP帐号
Inet1.Password = uPWS 'FTP密码
Inet1.Execute "", "ls"
ri = Inet1.StillExecuting
Do While ri
ri = Inet1.StillExecuting
DoEvents
Loop
vd = Inet1.GetChunk(1024, icString)
判断服务的FTP是否连接成功
下面下载服务器上的text数据,假设文件名为1.txt
p_pathDir 为当前软件运行目录,后面一个字符自带 \,如e:\1111\
tepFile 临时文件
工作方式是先下载这个文件下为,然后判断本地是否存在,如果存在,则打开文件读取内容,如果不存在,则说明服务器上不存在这个文件,但要注意,如果文件过大的话,可能需要等待的时候比较长。
tepFile = p_pathDir & "1.txt_"
'Inet1.Execute hDir, "get 1.txt " & tepFile
Inet1.Execute "", "GET 1.txt " & tepFile
ri = Inet1.StillExecuting
Do While ri
ri = Inet1.StillExecuting
DoEvents
Loop
If Dir(tepFile) = "" Then
Inet1.Cancel
MsgBox "文件不存在" & InetState, vbOKOnly + vbExclamation, "系统提示"
Else
Inet1.Cancel
'这里已经存在,与本地操作文件一样,请打开获取内容,不再详细写出
'
End If
‘贰’ 我用CFtpConnection类的成员函数在ftp服务器上创建一个文件夹,可怎么把文件上传到这个创建的文件夹呢
和本地文件读写类似的
先以读方式打开本地文件,再以写方式打开FTP远程文件,然后读取本地文件至远程文件。
关键代码:
bOpen=m_CFile.Open(m_str_LocalFileName,CFile::modeRead);
m_pRemoteFile=m_pConnect->OpenFile(m_str_remoteFileName,GENERIC_WRITE);
while((dwRead=m_CFile.Read(pBuf,m_FileLenStep))>0)
{
m_pRemoteFile->Write(pBuf,dwRead);
m_CurUploadSize+=dwRead;
}
‘叁’ 用C语言写一个FTP的客户端程序,需要了解哪些知识
一、需要的知识点:
1、SOCKET技术,网络编程的基本功能
2、FTP
3、如果需要自己写,可能需要熟悉各个网络框架
二、编写FTP所需要掌握的框架
1、wininet
2、libcurl
‘肆’ Linux/unix环境下C调用FTP如何进行
可以使用管道,下面是我的程序,你可以参考:
#include <stdio.h>
main(int argc, char *argv[]){
FILE *fp;
char str[255];
if (argc!=5){
printf("%s\n%s\n",
"Usage:",
" auto_ftp <ip> <user> <pass> <filename>");
exit();
}
if ((fp=popen("ftp -n","w"))==NULL) {
puts("Run ftp fail !");
exit();
}
//while ((fgets(str,255,fp))!=NULL) puts(str);
fprintf(fp,"open %s\n",argv[1]);
fprintf(fp,"user %s %s\n",argv[2],argv[3]);
fprintf(fp,"prompt\n");
fprintf(fp,"mget *%s\n",argv[4]);
fprintf(fp,"bye\n");
pclose(fp);
}
以上程序编译为auto_ftp,能够自动从命令行指定的IP、用户、密码下载指定的文件。
补充:
上载、下载都是一样的,都是通过管道调用ftp工具,C程序只需要发送命令即可,这些命令可以是任何命令,我程序中是GET,你也可以写PUT。
‘伍’ c#中上传文件至FTP指定目录方法
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
structPCB{
charNAME[10];/*进程名*/
intROUND;/*进程轮转时间片*/
intREACHTIME;/*进程到达时间*/
intCPUTIME;/*进程占用CPU时间*/
intCOUNT;/*计数器*/
intNEEDTIME;/*进程完成还要的CPU时间*/
charSTATE;/*进程的状态*/
structPCB*NEXT;/*链指针*/
};
structLINK{/*PCB的链结构*/
structPCB*RUN;/*当前运行进程指针*/
structPCB*READY;/*就绪队列头指针*/
structPCB*TAIL;/*就绪队列尾指针*/
structPCB*FINISH;/*完成队列头指针*/
};
voidINIT(LINK*);/*对PCB的链结构初始化*/
voidINSERT(LINK*);/*将执行了一个单位时间片数且还未完成的进程的PCB插到就绪队列的队尾*/
voidFIRSTIN(LINK*);/*将就绪队列中的第一个进程投入运行*/
voidPRINT(LINK*);/*打印每执行一个时间片后的所有进程的状态*/
voidPR(PCB*);/*打印一个进程的状态*/
intCREATE(LINK*,int);/*创建新的进程*/
voidROUNDSCH(LINK*);/*按时间片轮转法调度进程*/
voidmain(){
LINKpcbs;
inti;
INIT(&pcbs);
i=0;
printf("创建5个进程 ");
while(i<5){
if(CREATE(&pcbs,i+1)==1){
printf("进程已创建 ");
i++;
}
else
printf("进程创建失败 ");
}
FIRSTIN(&pcbs);
ROUNDSCH(&pcbs);
}
voidROUNDSCH(LINK*p){
PCB*pcb;
while(p->RUN!=NULL){
pcb=(PCB*)malloc(sizeof(PCB));
strcpy(pcb->NAME,p->RUN->NAME);
pcb->ROUND=p->RUN->ROUND;
pcb->REACHTIME=p->RUN->REACHTIME;
pcb->CPUTIME=p->RUN->CPUTIME;
pcb->COUNT=p->RUN->COUNT;
pcb->NEEDTIME=p->RUN->NEEDTIME;
pcb->STATE=p->RUN->STATE;
pcb->NEXT=p->RUN->NEXT;
pcb->CPUTIME++;
pcb->NEEDTIME--;
pcb->COUNT++;
if(pcb->NEEDTIME==0){
pcb->NEXT=p->FINISH->NEXT;
p->FINISH->NEXT=pcb;
pcb->STATE='F';
p->RUN=NULL;
if(p->READY!=p->TAIL)
FIRSTIN(p);
}
else{
p->RUN=pcb;
if(pcb->COUNT==pcb->ROUND){
pcb->COUNT=0;
if(p->READY!=p->TAIL){
pcb->STATE='W';
INSERT(p);
FIRSTIN(p);
}
}
}
PRINT(p);
}
}
voidINIT(LINK*p){
p->RUN=NULL;
p->TAIL=p->READY=(PCB*)malloc(sizeof(PCB));
p->READY->NEXT=NULL;
p->FINISH=(PCB*)malloc(sizeof(PCB));
p->FINISH->NEXT=NULL;
}
intCREATE(LINK*p,intn){
PCB*pcb,*q;
pcb=(PCB*)malloc(sizeof(PCB));
flushall();
printf("请输入第%d个进程的名称: ",n);
gets(pcb->NAME);
printf("请输入第%d个进程的轮转时间片数: ",n);
scanf("%d",&(pcb->ROUND));
printf("请输入第%d个进程的到达时间: ",n);
scanf("%d",&(pcb->REACHTIME));
pcb->CPUTIME=0;
pcb->COUNT=0;
printf("请输入第%d个进程需运行的时间片数: ",n);
scanf("%d",&(pcb->NEEDTIME));
pcb->STATE='W';
pcb->NEXT=NULL;
if(strcmp(pcb->NAME,"")==0||pcb->ROUND<=0||pcb->NEEDTIME<=0)/*输入错误*/
return0;
q=p->READY;
while(q->NEXT!=NULL&&q->NEXT->REACHTIME<=pcb->REACHTIME)
q=q->NEXT;
pcb->NEXT=q->NEXT;
q->NEXT=pcb;
if(pcb->NEXT==NULL)
p->TAIL=pcb;
return1;
}
voidFIRSTIN(LINK*p){
PCB*q;
q=p->READY->NEXT;
p->READY->NEXT=q->NEXT;
q->NEXT=NULL;
if(p->READY->NEXT==NULL)
p->TAIL=p->READY;
q->STATE='R';
p->RUN=q;
}
voidINSERT(LINK*p){
PCB*pcb;
pcb=(PCB*)malloc(sizeof(PCB));
strcpy(pcb->NAME,p->RUN->NAME);
pcb->ROUND=p->RUN->ROUND;
pcb->REACHTIME=p->RUN->REACHTIME;
pcb->CPUTIME=p->RUN->CPUTIME;
pcb->COUNT=p->RUN->COUNT;
pcb->NEEDTIME=p->RUN->NEEDTIME;
pcb->STATE=p->RUN->STATE;
pcb->NEXT=p->RUN->NEXT;
p->TAIL->NEXT=pcb;
p->TAIL=pcb;
p->RUN=NULL;
pcb->STATE='W';
}
voidPRINT(LINK*p){
PCB*pcb;
printf("执行一个时间片后的所有进程的状态: ");
if(p->RUN!=NULL)
PR(p->RUN);
if(p->READY!=p->TAIL){
pcb=p->READY->NEXT;
while(pcb!=NULL){
PR(pcb);
pcb=pcb->NEXT;
}
}
pcb=p->FINISH->NEXT;
while(pcb!=NULL){
PR(pcb);
pcb=pcb->NEXT;
}
}
voidPR(PCB*p){
printf("进程名:%s ",p->NAME);
printf("进程轮转时间片:%d ",p->ROUND);
printf("进程到达时间:%d ",p->REACHTIME);
printf("进程占用CPU时间:%d ",p->CPUTIME);
printf("计数器:%d ",p->COUNT);
printf("进程完成还要的CPU时间:%d ",p->NEEDTIME);
printf("进程的状态:%c ",p->STATE);
}
‘陆’ c# 如何从ftp上复制/除去ftp上的某个文件
用FTPRush登陆FTP,选中文件右击删除
‘柒’ C语言如何连接FTP,连接成功后遍历FTP下目录,包括子目录,要源代码,而且是成功案例,自以为是的靠边站!
用libcurl实现,具体代码看
http://curl.haxx.se/libcurl/c/ftpget.html
‘捌’ 使用CFtpConnection类,总是有内存泄露,是咋回事
为了与FTPInternet服务器通讯,必须先创建一个CInternetSession实例,然后创建CFtpConnection对象。创建CFtpConnection对象不采用直接方式,而是调用CInternetSession::GetFtpConnertion来创建并返回一个指向它的指针。CFtpConnection类的成员构造函数CFtpConnection构造一个CFtpConnection对象操作SetCurrentDirectory设置当前FTP目录GetCurrentDirectory获取此次连接的当前目录GetCurrentDirectoryAsURL获取作为URL的此次连接的当前目录RemoveDirectory从服务器移去指定目录CreateDirectory在服务器上构造一个目录Rename将服务器上的文件改名Remove从服务器上移去一个文件PutFile将一个文件放到服务器上GetFile从连接的服务器上获取一个文件OpenFile在连接的服务器上打开一个文件Close关闭与服务器的连接实例一:上传文件CStringstrAppName=AfxGetAppName();CInternetSession*pSession=newCInternetSession(strAppName);CFtpConnection*pConn=pSession->GetFtpConnection("10.46.1.232","Anonymous","",21);pConn->SetCurrentDirectory("test");CStringstrLocfile,strRemotefile;strLocfile="C:\\cmd.txt";strRemotefile="cmd.txt";pConn->PutFile(strLocfile,strRemotefile,FTP_TRANSFER_TYPE_ASCII);pConn->Close();return0;实例二:Ftp的打开文件操作函数:OpenFile
‘玖’ C语言实现从FTP下载、上传文件
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。
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)行为,必须与此服务器建立适当的连接。
‘拾’ C语言如何用FtpPutFile()函数上传文件到Ftp服务器!下载用FtpGetFile()可以!
- 先后使用InternetOpen和InternetConnect打开连接。
- 使用CreateFile函数打开本地文件。
- 使用FtpOpenFile函数打开远程文件。
- 分别使用InternetReadFile和ReadFile函数读取 FTP 或本地文件。
- 分别使用InternetWriteFile和WriteFile函数写入 FTP 或本地文件。
- 使用CloseHandle函数关闭本地文件句柄。
- 使用InternetCloseHandle函数关闭 FTP 文件句柄。