qt实现ftp创建文件夹命令

qt实现ftp创建文件夹命令,第1张

本文实例为大家分享了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地址+空格+端口号,没有+号

回车后d出用户一行,输入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)

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

mkdir dir-name:在远程主机中建一目录

如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。

FTP的命令行格式为: ftp -v -d -i -n -g [主机名] ,

其中 -v 显示远程服务器的所有响应信息;

-n 限制ftp的自动登录,即不使用;.n etrc文件;

-d 使用调试方式;

-g 取消全局文件名。

FTP使用的内部命令如下(中括号表示可选项):

1.![cmd[args>:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip

2.$ macro-ame[args]: 执行宏定义macro-name。

3.account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。

4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。

5.ascii:使用ascii类型传输方式。

6.bell:每个命令执行完毕后计算机响铃一次。

7.bin:使用二进制文件传输方式。

8.bye:退出ftp会话过程。

9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。

10.cd remote-dir:进入远程主机目录。

11.cdup:进入远程主机目录的父目录。

12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。

13.close:中断与远程服务器的ftp会话(与open对应)。

14.cr:使用asscii方式传输文件时,将回车换行转换为回行。

15.delete remote-file:删除远程主机文件。

16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。

17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件

18.disconnection:同close。

19.form format:将文件传输方式设置为format,缺省为file方式。

20.get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。

21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。

22.hash:每传输1024字节,显示一个hash符号(#)。

23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。

24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。

25.image:设置二进制传输方式(同binary)。

26.lcd[dir]:将本地工作目录切换至dir。

27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。

28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。

29.mdelete[remote-file]:删除远程主机文件。

30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。

31.mget remote-files:传输多个远程文件。

32.mkdir dir-name:在远程主机中建一目录。

33.mls remote-file local-file:同nlist,但可指定多个文件名。

34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。

35.modtime file-name:显示远程主机文件的最后修改时间。

36.mput local-file:将多个文件传输至远程主机。

37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。

38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。

39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。

40.ntrans[inchars[outchars>:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。

41.open host[port]:建立指定ftp服务器连接,可指定连接端口。

42.passive:进入被动传输方式。

43.prompt:设置多个文件传输时的交互提示。

44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。

45.put local-file[remote-file]:将本地文件local-file传送至远程主机。

46.pwd:显示远程主机的当前工作目录。

47.quit:同bye,退出ftp会话。

48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.

49.recv remote-file[local-file]:同get。

50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。

51.rhelp[cmd-name]:请求获得远程主机的帮助。

52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。

53.rename[from][to]:更改远程主机文件名。

54.reset:清除回答队列。

55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。

56.rmdir dir-name:删除远程主机目录。

57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。

58.send local-file[remote-file]:同put。

59.sendport:设置PORT命令的使用。

60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。

61.size file-name:显示远程主机文件大小,如:site idle 7200。

62.status:显示当前ftp状态。

63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。

64.sunique:将远程主机文件名存储设置为只一(与runique对应)。

65.system:显示远程主机的 *** 作系统类型。

66.tenex:将文件传输类型设置为TENEX机的所需的类型。

67.tick:设置传输时的字节计数器。

68.trace:设置包跟踪。

69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。

70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3

71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。

72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.

73.?[cmd]:同help.


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

原文地址: http://outofmemory.cn/tougao/12068975.html

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

发表评论

登录后才能评论

评论列表(0条)

保存