當前位置:首頁 » 文件管理 » qt實現ftp客戶端下載

qt實現ftp客戶端下載

發布時間: 2025-08-01 14:07:23

Ⅰ qt實現ftp創建文件夾命令

本文實例為大家分享了QT實現FTP上傳文件的具體代碼,供大家參考,具體內容如下

兩台電腦通過網線建立本地連接,保證網關在同一段;

伺服器端打開ftp;

控制面板→程序→啟用或關閉windows功能→windows功能→Internet信息服務
啟用「FTP服務」FTP擴展性」 IIS管理控制台」

開始屏幕的搜索中輸入「IIS」,然後點擊打開「IIS管理器」
打開「IIS管理器」後,在左欄的「網站」上點擊右鍵,打開「添加FTP站點」
然後按照提示填寫站點信息
點擊「下一步」,按照下圖提示,設置「綁定和SSL設置」,在「IP地址」處,可以用內網IP也可以用外網IP,訪客自然也就根據你的IP設定來決定;
點擊「下一步」,設置「身份驗證和授權信息」
然後在本機瀏覽器地址欄中輸入「ftp://填寫的IP」測試一下

客戶端網頁測試遠程訪問

客戶端(另一台電腦)瀏覽器地址欄中輸入「ftp://填寫的IP」測試一下

客戶端cmd測試遠程訪問;

win+r打開運行窗口,輸入cmd
回車打開cmd命令窗口
cmd命令中輸入:ftp回車
回車切換至ftp命令窗口,輸入命令:open,回車提示:到
到即所要連接測試的ftp地址,我們輸入:IP 22
即:ip地址+空格+埠號,沒有+號
回車後彈出用戶一行,輸入ftp的用戶名後回車,輸入ftp用戶名對應的密碼
輸入密碼後回車,如果提示,user logged in就說么ftp創建無問題

客戶端程序測試遠程訪問。

新建程序,添加ftpclass.cpp、ftpclass.h,復制main.cpp內容到程序入口函數
注意:/項目-屬性-常規-字元集-使用多位元組字元集/

//main.cpp
#include "stdafx.h"
#include "ftpclass.h"

void main()
{
printf("------- 開始測試!------\n");
printf("01--創建連接 %d\n", FtpClass::createConnection());
printf("02--打開目標ftp %d\n", FtpClass::createTable());

/*可以讀取ini內參數
FtpClass::ftp_Ip = TEXT("Ini讀取");
FtpClass::ftp_Port = TEXT("Ini讀取");
FtpClass::ftp_User = TEXT("Ini讀取");
FtpClass::ftp_Password = TEXT("Ini讀取");
FtpClass::ftp_Fixed_Path = TEXT("Ini讀取");*/

printf("03--創建文件夾 %d\n", FtpClass::createFolder("自動生成目錄1","自動生成目錄2","自動生成目錄3"));
/*上傳目標路徑*/

printf("04--上傳文件 %d\n", FtpClass::insert( "D:/a.txt", "b.txt"));
/*本機文件需要上傳文件*/ /*上傳後文件名稱,可以和本地文件名稱不一樣,類型最好別換*/

printf("05--關閉通訊 %d\n", FtpClass::createClose());
printf("------ 結束測試!------\n");

return ;
}
//ftpclass.h
/*項目-屬性-常規-字元集-使用多位元組字元集*/
/*wininet.lib、shlwapi.lib可以直接添加到附加依賴項*/
/*BOOL_VERIFY、NULL_VERIFY 程序結束判斷*/

#pragma once

#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"shlwapi.lib")

#define BOOL_VERIFY(emStatus_bool,switch_bool) \
if (emStatus_bool == true)\
{return true;}\
else{\
if (switch_bool == 3) printf(" FTP_03_err:創建文件夾失敗!%d\n"); \
if (switch_bool == 4) printf(" FTP_04_err:上傳文件失敗!\n"); \
if (switch_bool == 5) printf(" FTP_05_err:關閉窗口句柄失敗!\n"); \
return false;\
}

#define NULL_VERIFY(emStatus_null,switch_null) \
if (emStatus_null != NULL)\
{return true;}\
else{\
if (switch_null == 1) {printf(" FTP_01_err:打開通訊錯誤 Error:%d\n", GetLastError());}\
if (switch_null == 2) {printf(" FTP_02_err:建立連接錯誤 Error:%d\n", GetLastError());}\
return false;\
}

#include "stdafx.h"//沒用
#include <afxinet.h>//MFC相關
#include "wininet.h"//調用FTP相關類
#include "shlwapi.h"//調用文件操作相關類

class FtpClass
{
public:
/*ini讀取變數*/
static CString ftp_Ip;//目標ip
static CString ftp_Port;//目標埠
static CString ftp_User;//目標賬戶
static CString ftp_Password;//目標密碼
static CString ftp_Fixed_Path;//目標固定路徑
static CString ftp_Free_Path;//目標自己生成路徑

/*全局變數*/
static BOOL pRes;
static HINTERNET hInternet;
static HINTERNET hConnect;

/*全局函數*/
static bool createConnection(); //創建一個連接
static bool createTable();
static bool ThreadInternetConnect(PVOID )
//打開目標ftp
static bool createFolder(CString temp1, CString temp2, CString temp3); //上傳文件
static bool insert(CString temp, CString temp1); //出入數據
static bool createClose(); //斷開連接
};
//ftpclass.cpp
#include "stdafx.h"
#include "ftpclass.h"

CString FtpClass::ftp_Ip = TEXT("192.168.3.104");
CString FtpClass::ftp_Port = TEXT("21");
CString FtpClass::ftp_User = TEXT("Administrator");
CString FtpClass::ftp_Password = TEXT("xinxin");
CString FtpClass::ftp_Fixed_Path = TEXT("1級固定目錄/2級固定目錄/3級固定目錄");
CString FtpClass::ftp_Free_Path = TEXT("自動生成目錄");
BOOL FtpClass::pRes = false;
HINTERNET FtpClass::hInternet = NULL;
HINTERNET FtpClass::hConnect = NULL;

//創建一個連接
bool FtpClass::createConnection() {
/*ftp_Ip = TEXT("Ini讀取");
ftp_Port = TEXT("Ini讀取");
ftp_User = TEXT("Ini讀取");
ftp_Password = TEXT("Ini讀取");
ftp_Fixed_Path = TEXT("Ini讀取");*/

hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT,
NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE);
NULL_VERIFY(hInternet,1);
}
bool FtpClass::ThreadInternetConnect(PVOID param) {

// 打開http
hConnect = InternetConnect(hInternet, ftp_Ip, INTERNET_DEFAULT_FTP_PORT,//INTERNET_DEFAULT_FTP_PORT 第三個參數默認值21
ftp_User, ftp_Password, INTERNET_SERVICE_FTP,
INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);

return 1;
}

//打開目標ftp
bool FtpClass::createTable()
{
/*hConnect = InternetConnect(hInternet, ftp_Ip, 25,//INTERNET_DEFAULT_FTP_PORT 第三個參數默認值21
ftp_User, ftp_Password, INTERNET_SERVICE_FTP,
INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);
NULL_VERIFY(hConnect,2);*/
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadInternetConnect, (LPVOID)NULL, 0, NULL);
//超時3秒,如果等待結果是超時
if (WaitForSingleObject(hThread, 3 * 1000) == WAIT_TIMEOUT) {
TerminateThread(hThread, 0);
CloseHandle(hThread);
NULL_VERIFY(hConnect, 2);
}
NULL_VERIFY(hConnect, 2);
}

//上傳文件
bool FtpClass::createFolder(CString temp1, CString temp2, CString temp3)
{
/*新建文件件每次只能創建一級,多個需要分多次創建*/
pRes = false;
ftp_Free_Path = "";
ftp_Free_Path = ftp_Fixed_Path + "/" + temp1;
FtpCreateDirectory(hConnect, ftp_Free_Path);
ftp_Free_Path = ftp_Free_Path + "/" + temp2;
FtpCreateDirectory(hConnect, ftp_Free_Path);
ftp_Free_Path = ftp_Free_Path + "/" + temp3;
pRes = FtpCreateDirectory(hConnect, ftp_Free_Path);
BOOL_VERIFY(pRes,3);
}
//出入數據
bool FtpClass::insert(CString temp, CString temp1)
{
pRes = false;
ftp_Free_Path = ftp_Free_Path + "/" +temp1;
pRes = FtpPutFile(hConnect, temp,/*本機文件*/
ftp_Free_Path, /*TEXT("一級目錄/二級目錄/三級目錄/a.txt"),*/
FTP_TRANSFER_TYPE_ASCII, 0);
BOOL_VERIFY(pRes,4);
}
//斷開連接
bool FtpClass::createClose()
{
pRes = false;
if (InternetCloseHandle(hConnect))
pRes = InternetCloseHandle(hInternet);
BOOL_VERIFY(pRes,5);
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

Ⅱ Qt QFtp或QNetworkAccessManager中有沒有哪個成員能獲取FTP遠程文件的大小

qt5之後就不在使用QFtp QHttp,因為QNetworkaccessmanager已經替代了大部分功能,不知道digia在想啥,又不完全替換所有功能,有2種方法供用戶選擇
1現在編譯ftp源碼
2.使用第三方libcurl庫!

Ⅲ Qt中使用QNetworkAccessManager實現ftp上傳功能

QFile file(xxx)
file.open(QIODevice::ReadOnly)
QByteArray data = file -> readAll()

QNetworkAccessManager manager;

QUrl url('ftp://xxx.xxx.xxx'); // 這里是ftp地址+文件名 一定要加文件名

url.setUsername(xxx)
url.setPassword(xxx)
manager.put(QNetworkRequest(url), data)
差不多是這樣

熱點內容
郭天祥新概念51單片機c語言教程 發布:2025-09-10 08:40:13 瀏覽:631
文件上傳ftp伺服器 發布:2025-09-10 08:39:24 瀏覽:698
硬聚類演算法 發布:2025-09-10 08:39:18 瀏覽:940
電子表加密碼 發布:2025-09-10 08:18:38 瀏覽:274
python圖像處理實例 發布:2025-09-10 08:05:54 瀏覽:382
支付寶怎麼的修改密碼 發布:2025-09-10 08:05:53 瀏覽:463
mysql資料庫innodb 發布:2025-09-10 08:05:47 瀏覽:6
ipadmini還原密碼多少 發布:2025-09-10 08:00:37 瀏覽:162
易語言有了源碼 發布:2025-09-10 07:53:57 瀏覽:241
標准C語言基礎教程 發布:2025-09-10 07:36:15 瀏覽:516