qt 5.15.2读取csv文件功能

qt 5.15.2读取csv文件功能

工程文件.pro 内容:

cpp 复制代码
QT = core

#添加网络模块
QT += network

CONFIG += c++17 cmdline

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.cpp

cpp 复制代码
#include <QCoreApplication>

#include <iostream>
#include <QFile>
#include <QTextStream>
//
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>
#include <QDir>
//
QNetworkAccessManager manager;
//
int printf(QString line)
{
    std::cout<<line.toStdString()<<std::endl;
}
int printf(int line)
{
    std::cout<<line<<std::endl;
}

//异步下载
bool downloadFile(QString file_url,QString toDirPath)
{
    QDir dirPath(toDirPath);
    if(!dirPath.exists())
    {
        if(!dirPath.mkdir(dirPath.absolutePath()))
        {
            printf("create dir error");
            return false;
        }
    }

    printf("old="+file_url);
    QUrl url(file_url); //"http://example.com/file.txt");
    QNetworkRequest request(url);

    // 发送GET请求获取文件数据
    QNetworkReply *reply = manager.get(request);

    // 处理请求完成信号
    QObject::connect(reply, &QNetworkReply::finished, [&]() {
        if (reply->error() == QNetworkReply::NoError) {
            // 获取响应数据
            QByteArray data = reply->readAll();

            QString toFilePath=toDirPath+"\\"+url.fileName();
            printf(toFilePath);
            // 保存到本地文件
            QFile file(toFilePath);
            if (file.open(QIODevice::WriteOnly)) {
                file.write(data);
                file.close();
                printf("文件下载成功:"+toFilePath);
            } else {
                printf("无法保存文件:"+toFilePath);
            }
        } else {
            printf("请求错误:");printf(reply->errorString());
        }
        // 清理资源
        reply->deleteLater();
        qApp->quit();
    });
    return true;
}

//同步下载
bool syncDownloadFile(QString file_url,QString toDirPath)
{
    QUrl url(file_url);
    //输出C:\data\obj\test\Tile_+005_+006_OBJ.zip
    QString downloadFilePath=toDirPath+"\\"+url.fileName();
    printf(downloadFilePath);
    //QNetworkAccessManager manager;
    QNetworkReply *pReply = manager.get(QNetworkRequest(url));
    QEventLoop loop;
    manager.connect(pReply, SIGNAL(manager.finished()), &loop, SLOT(manager.quit()));
    loop.exec();

    if(pReply->error() != QNetworkReply::NoError)
    {
        return false;
    }
    else
    {
        int code = pReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
        if (code != 200)
        {
            return false;
        }
        else
        {
            //下载成功,保存文件
            QFile localFile(downloadFilePath);
            if (localFile.open(QIODevice::WriteOnly))
            {
                localFile.write(pReply->readAll());
                localFile.close();
            }
        }
    }
    pReply->deleteLater();
    return true;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    std::cout<<"Hello World! hsg77"<<std::endl;

    //打开csv文件
    QFile file("E:\\QtProject\\objDownloadTest\\GridIdx_OBJ.csv");
    std::cout<<file.fileName().toStdString()<<std::endl;
    if(file.exists())
    {
        if(file.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file);

            //std::cout<<"file state="<<in.atEnd()<<std::endl;

            while(!in.atEnd())
            {
                QString line=in.readLine();
                QStringList fds=line.split("	");

                //std::cout<<line.toStdString()<<std::endl;
                //printf(fds.length());

                //处理每一行的数据
                QString fileUrl=fds.at(13);
                printf("readydown="+fileUrl);

                /*
                int i=0;
                for(const QString& fd : fds)
                {
                    printf(i);
                    printf("="+fd);
                    i+=1;
                }*/

                if(fileUrl!="FILE_URL")
                {
                    //下载文件  fileUrl
                    QString toDirPath="C:\\data\\obj\\test";
                    syncDownloadFile(fileUrl,toDirPath);
                }
                //break;

            }
        }
    }
    //
    file.close();
    std::cout<<"csv file closed"<<std::endl;

    return a.exec();
}

本blog地址:
http://blog.csdn.net/hsg77

相关推荐
从零开始的代码生活_17 分钟前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸21 分钟前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
Quz34 分钟前
QML 信号与槽:直接绑定与跨文件通信
qt·编程语言·设计
GIS阵地1 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
yaoxin5211232 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
groundhappy2 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
小钻风33663 小时前
Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理
java·开发语言
qq_452396233 小时前
第二篇:《Go 开发环境搭建:SDK、IDE、Module 与 Hello World》
开发语言·ide·golang
天青色等烟雨..4 小时前
全流程ArcGISPro空间分析、三维建模、可视化及Python融合应用技术
开发语言·python
丰锋ff4 小时前
1.2 Qt常用基础类型
开发语言·qt