cftp代碼
Ⅰ 使用Cftpconnect中PutFile始終只能上傳一個文件
通過CFileFind類便利文件夾中所有文件,然後每個文件調用下PutFile
以下代碼將當前目錄下的文件枚舉出來並列印每個文件名:
CFileFind finder
BOOL bWorking = finder.FindFile("*.*");
while(bWorking)
{
bWorking = finder.FindNextFile( );
cout <<(LPCTSTR) finder.GetFileName( ) <<endl;
}
為使示例簡單,此代碼使用標准C++庫函數cout類,cout行可由調用CListBox::AddString來代替。
要了解有關CFileFind和其它WinInet類共同使用的情況,請參閱聯機文檔「Visual C++程序員指南」中的「用WinInet設計Internet程序」。
Ⅱ 主動模式(port)的ftp客戶端c/c++代碼示例
在linux環境下執行
#gcc ftp.c -o ftp
#./ftp
#ftp->login //登錄
connect success,pelase enter username
#ftp-> //後面自己按照提示(name支持匿名登錄,即輸入anonymous)
Ⅲ 請列出FTP的常見命令
1、DOS方式下FTP的使用
可在Windows系統cmd命令提示符下,輸入
C: >FTP 域名
USER NAME: 管理員帳號
PASSWORD: 口令
FTP>PUT
LOCAL FILE: filename
REMOTE FILE: filename
即可上傳
下載時使用GET命令
2、FTP常用命令
Ftp命令的功能是在本地機和遠程機之間傳送文件。該命令的一般格式如下:
c:> ftp 主機名/IP
最常用的命令有:
ls 列出遠程機的當前目錄
cd 在遠程機上改變工作目錄
lcd 在本地機上改變工作目錄
ascii 設置文件傳輸方式為ASCII模式
binary 設置文件傳輸方式為二進制模式
close 終止當前的ftp會話
hash 每次傳輸完數據緩沖區中的數據後就顯示一個#號
get(mget) 從遠程機傳送指定文件到本地機
put(mput) 從本地機傳送指定文件到遠程機
open 連接遠程ftp站點
quit 斷開與遠程機的連接並退出ftp
? 顯示本地幫助信息
3.Linux下FTP命令詳解
FTP> ! 從 ftp 子系統退出到外殼。
FTP> ? 顯示 ftp 命令說明。? 與 help 相同。
格式:? [command]
說明:[command]指定需要幫助的命令名稱。如果沒有指定 command,ftp 將顯示全部命令的列表。
FTP> append 使用當前文件類型設置將本地文件附加到遠程計算機上的文件。
格式:append local-file [remote-file]
說明:local-file 指定要添加的本地文件。
remote-file 指定要添加 local-file 的遠程計算機上的文件。如果省略了 remote-file,本地文件名將被用作遠程文件名。
FTP> ascii 將文件傳送類型設置為默認的 ASCII。
說明:FTP 支持兩種文件傳送類型,ASCII 碼和二進制圖像。在傳送文本文件時應該使用ASCII。
FTP> bell 切換響鈴以在每個文件傳送命令完成後響鈴。默認情況下,鈴聲是關閉的。
FTP> binary(或bi) 將文件傳送類型設置為二進制。
FTP> bye(或by) 結束與遠程計算機的 FTP 會話並退出 ftp。
FTP> cd 更改遠程計算機上的工作目錄。
格式:cd remote-directory
說明:remote-directory 指定要更改的遠程計算機上的目錄。
FTP> close 結束與遠程伺服器的 FTP 會話並返回命令解釋程序。
FTP> debug 切換調試。當調試打開時,發送到遠程計算機的每個命令都列印,前面是字元串「>」。默認情況下,調試是關閉的。
FTP> delete 刪除遠程計算機上的文件。
格式:delete remote-file
說明:remote-file 指定要刪除的文件。
FTP> dir 顯示遠程目錄文件和子目錄列表。
格式:dir [remote-directory] [local-file]
說明:remote-directory 指定要查看其列表的目錄。如果沒有指定目錄,將使用遠程計算機中的當前工作目錄。Local-file 指定要存儲列表的本地文件。如果沒有指定,輸出將顯示在屏幕上。
FTP> disconnect 從遠程計算機斷開,保留 ftp 提示。
FTP> get 使用當前文件轉換類型將遠程文件復制到本地計算機。
格式:get remote-file [local-file]
說明:remote-file 指定要復制的遠程文件。
Local-file 指定要在本地計算機上使用的名稱。如果沒有指定,文件將命名為 remote-file。
FTP >glob 切換文件名組合。組合允許在內部文件或路徑名中使用通配符(*和?)。默認情況下,組合是打開的。
FTP >hash 切換已傳輸的每個數據塊的數字簽名 (#) 列印。數據塊的大小是2048 位元組。默認情況下,散列符號列印是關閉的。
FTP >help 顯示 ftp 命令說明。
格式:help [command]
說明:command 指定需要有關說明的命令的名稱。如果沒有指定 command,ftp 將顯示全部命令的列表。
FTP >lcd 更改本地計算機上的工作目錄。默認情況下,工作目錄是啟動 ftp 的目錄。
格式:lcd [directory]
說明:directory 指定要更改的本地計算機上的目錄。如果沒有指定directory,將顯示本地計算機中當前的工作目錄。
FTP >literal 將參數逐字發送到遠程 FTP 伺服器。將返回單個的 FTP 回復代碼。
格式:literal argument [ ...]
說明:argument 指定要發送到 FTP 伺服器的參數。
FTP >ls 顯示遠程目錄文件和子目錄的縮寫列表。
格式:ls [remote-directory] [local-file]
說明:remote-directory 指定要查看其列表的目錄。如果沒有指定目錄,將使用遠程計算機中的當前工作目錄。 local-file 指定要存儲列表的本地文件。如果沒有指定,輸出將顯示在屏幕上。
FTP >mdelete 刪除遠程計算機上的文件。
格式:mdelete remote-files [ ...]
說明:remote-files 指定要刪除的遠程文件。
FTP >mdir 顯示遠程目錄文件和子目錄列表。可以使用 mdir 指定多個文件。
格式:mdir remote-files [ ...] local-file
說明:remote-files 指定要查看列表的目錄。必須指定 remote-files。請鍵入 - 使用遠程計算機上的當前工作目錄。
local-file 指定要還原列表的本地文件。請鍵入- 在屏幕上顯示列表。
FTP >mget 使用當前文件傳送類型將遠程文件復制到本地計算機。
格式:mget remote-files [ ...]
說明:remote-files 指定要復制到本地計算機的遠程文件。
FTP >mkdir 創建遠程目錄。
格式:mkdir directory
說明:directory 指定新的遠程目錄的名稱。
FTP >mls 顯示遠程目錄文件和子目錄的縮寫列表。
格式:mls remote-files [ ...] local-file
說明:remote-files 指定要查看列表的文件。必須指定 remote-files;
請鍵入- 使用遠程計算機上的當前工作目錄。
local-file 指定要存儲列表的本地文件。請鍵入 - 以在屏幕上顯示列表。
FTP >mput 使用當前文件傳送類型將本地文件復制到遠程計算機上。
格式:mput local-files [ ...]
說明:local-files 指定要復制到遠程計算機的本地文件
FTP >open 與指定的 FTP 伺服器連接。
格式:open computer [port]
說明:computer 指定要連接的遠程計算機。可以通過 IP 地址或計算機名稱指定計算機(DNS 或主機文件必須可用)。如果自動登錄打開(默認),ftp 還將嘗試自動將用戶登錄到 FTP 伺服器port 指定用來聯系 FTP 伺服器的埠號。
FTP >prompt 切換提示。如果關閉提示時 mget 及 mput 傳送所有文件,Ftp在多文件傳送過程中將提示允許您有選擇地檢索或存儲文件。默認情況下,提示是
打開的。
FTP >put 使用當前文件傳送類型將本地文件復制到遠程計算機上。
格式:put local-file [remote-file]
說明:local-file 指定要復制的本地文件。
remote-file 指定要在遠程計算機上使用的名稱。如果沒有指定,文件將命名為 local-file。
FTP >pwd 顯示遠程計算機上的當前目錄。
FTP >quit 結束與遠程計算機的 FTP 會話並退出 ftp。
FTP >quote 將參數逐字發送到遠程 FTP 伺服器。將返回單個的 FTP 回復代碼。
Quote 與 literal 相同。
格式:quote argument [ ...]
說明:argument 指定要發送到 FTP 伺服器的參數。
FTP >recv 使用當前文件傳送類型將遠程文件復制到本地計算機。Recv 與 get相同。
格式:recv remote-file [local-file]
說明:remote-file 指定要復制的遠程文件。
local-file 指定要在本地計算機上使用的名稱。如果沒有指定,文件將命名為 remote-file。
FTP >remotehelp 顯示遠程命令幫助。
格式:remotehelp [command]
說明:command 指定需要幫助的命令的名稱。如果沒有指定 command,ftp將顯示全部遠程命令的列表。
FTP >rename 重命名遠程文件。
格式:rename filename newfilename
說明:filename 指定要重命名的文件。 newfilename 指定新的文件名。
FTP >rmdir 刪除遠程目錄。
格式:rmdir directory
說明:directory 指定要刪除的遠程目錄的名稱。
FTP >send 使用當前文件傳送類型將本地文件復制到遠程計算機上。Send 與put 相同。
格式:send local-file [remote-file]
說明:local-file 指定要復制的本地文件。 remote-file 指定要在遠程計算機上使用的名稱。如果沒有指定,文件將命名為 local-file。
FTP >status 顯示 FTP 連接和切換的當前狀態。
FTP >trace 切換數據包跟蹤。Trace 在運行 ftp 命令時顯示每個數據包的路由。
FTP >type 設置或顯示文件傳送類型。
格式:type [type-name]
說明:type-name 指定文件傳送類型。默認設置為 ascii。如果沒有指定type-name,將顯示當前的類型。
FTP >user 指定遠程計算機的用戶。
格式:user username [password] [account]
說明:user-name 指定登錄到遠程計算機所使用的用戶名。password 指定 user-name 的密碼。如果沒有指定,但必須指定,ftp 會提示輸入密碼。
account 指定登錄到遠程計算機所使用的帳戶。如果沒有指定account,但是需要指定,ftp 會提示您輸入帳戶。
FTP >verbose 切換 verbose 模式。如果打開,將顯示所有 ftp 響應。在文件傳送完成後,將同時顯示與傳送效率有關的統計信息。默認情況下,verbose 是打開的。
Ⅳ VBA中如何用FtpFindFirstFile查看FTP上文件是否存在
我做過WORD中的VBA,不知道兄弟是要在什麼環境中運行的。
不同環境,有些函數是有區別的
所以建議你先使用SetFTPDirectory指定目錄,然後再使用FtpFindFirstFile函數,這時sFile應該就是"0000.xls"。
你可以參考一下cFTP類中的GetFTPDirectoryContent方法的代碼。
還沒有安裝FTP伺服器,還不能幫你寫出完整的代碼,你自己先試試,不好意思。
Ⅳ 我用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 是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#中上傳文件至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);
}