QFTP无法遍历远程目录

1、使用QFTP想遍历远程目录,同时本地还要进行筛选过滤,由于QFTP只能通过如下

connect(m_pFtp,SIGNAL(listInfo(QUrlInfo)),this,SLOT(slot_listInfo(QUrlInfo)));

信号槽这种方式,所以就无法进行递归遍历。

解决方法:由于已经知晓远程目录的具体层级,每层的目录名称,所以本人使用了树形结构来存储远程目录。界面启动的同时,先初始化树形结构,后边筛选遍历的时候可以直接递归遍历树形结构即可。遍历的时候,可根据不同文件深度来跟界面的筛选条件比较。

class TreeNode {
public:
    QString name;   //文件名
    QString path;   //路径
    int depth;      //文件夹层级/深度
    bool used;      //是否显示
    QVector<TreeNode*> children;

    TreeNode(const QString& data) : name(data) {}

    void addChild(TreeNode* child) {
        children.push_back(child);
    }

    ~TreeNode() {
        for (auto child : children) {
            delete child;
        }
    }
};

由于每一个节点都存储当前的文件名称以及路径,最终get的时候可以将每一层的路径拼接起来形成最终的文件路径,先cd进去最终目录,再get文件到本地。

2、由于树形结构存储的文件名称中带有中文,最终cd和get的时候都会失败,无法打开该目录。

解决方法:QFtp::cd函数中使用的是QLatin1String,所以cd的参数传入时转换为QLatin1

QString strFile = "/中文目录";
QString strPath = QString::fromLatin1(strFile.toLocal8Bit());
m_pFtp->cd(strPath);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值