QT5 파일 읽기/쓰기 작업

11080 단어

QFile Class


1. read 읽기 파일

  • 파일 객체 QFile file("파일 주소") 로드
  • 로드된 파일 파일을 엽니다.오픈 (열기 방식);
  • 운영 파일
  • 열린 파일 파일을 닫습니다.colse();
  • void Widget::on_pushButton_clicked()
    {
        QFile file("L:/qtpro/_qtApp/text/t.txt");
        file.open(QIODevice::ReadOnly | QIODevice::Text);
        QByteArray t = file.readAll();
        ui->text_r->setText(QString(t));
        file.close();
    }

    2. wirte 파일 쓰기

  • QString 객체에 저장할 파일을 일반 텍스트로 읽기//ui->texte->toPlainText();
  • QFile 객체 저장 파일 만들기
  • QFile 객체 열기
  • 파일 쓰기 작업
  • 열린 파일을 닫기;
  • void Widget::on_pushButton_2_clicked()
    {
        QString e = ui->text_e->toPlainText();
        QFile file("L:/qtpro/_qtApp/text/e.txt");
        file.open(QIODevice::WriteOnly | QIODevice::Text);
        file.write(e.toUtf8());
        file.close();
    }

    세부 최적화 처리

  • read 파일에 읽기 파일 선택 항목 추가QFileDialog::getOpenFileName();
  • 파일을 여는 데 성공했는지 판단하기;
  • 줄마다 파일을 읽고 줄마다 문자 수를 제어할 수 있다.
  • write 파일 생성 저장 경로 QFileDialog::getSaveFileName(). 
  • void Widget::on_pushButton_clicked()
    {
        QFile file;
        QString f = QFileDialog::getOpenFileName(this, QString(" "), QString("/"),QString("TEXT(*.txt)"));
        file.setFileName(f);
        if(file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QByteArray t ;
            while(!file.atEnd())
            {
                t += file.readLine();
            }
            ui->text_r->setText(QString(t));
            file.close();
        }
    }
    
    void Widget::on_pushButton_2_clicked()
    {
        QString e = ui->text_e->toPlainText();
        QFile file;
        file.setFileName(QFileDialog::getSaveFileName(this, QString(" "), QString("/"),QString("TEXT(*.txt)")));
        file.open(QIODevice::WriteOnly | QIODevice::Text);
        file.write(e.toUtf8());
        file.close();
    }

    인코딩별 변환


    QString -> QByteArray      QString.toUtf8();
    QByteArray -> std::string  QByteArray.toStdString();
    std::string -> char *        string.date();

    공통 정적 함수:


     

    QFileDialog:: getOpenFileName()// 지정한 파일 경로 이름을 가져와 QString으로 돌아가기


    QFileDialog:: getExistingDirectory ()// 지정된 경로를 가져와 QString으로 돌아가기


    QFileDialog:: getSaveFileName()// 지정한 저장 경로 이름을 가져와 QString으로 돌아가기


    보조적으로 사용되는 클래스:


     

    QFileInfo class


    파일 정보 얻기;
    QFileInfo 
    
        QFile file(f);
        QFileInfo info(file);
      
        qDebug() << info.exists();
        qDebug() << info.isFile();
        qDebug() << info.isReadable();
        qDebug() << info.isWritable();
        qDebug() << info.created();
        qDebug() << info.lastRead();
        qDebug() << info.lastModified();
        qDebug() << info.path();
        qDebug() << info.fileName();
        qDebug() << info.suffix();
        qDebug() << info.size();

     

    2. 텍스트 흐름과 데이터 흐름


    QT에서 파일을 텍스트 파일과 데이터 파일로 나눈다. 텍스트 파일의 내용은 읽을 수 있는 텍스트 문자이고 데이터 파일의 내용은 이진 데이터이다.
    QFile은 다음과 같은 주요 함수 인터페이스를 통해 텍스트 파일 및 데이터 파일 작업을 직접 지원합니다.
  • qint64 read(char* data, qint64 maxSize)//데이터 흐름 읽기
  • QByteArray read(qint64 maxSize)//텍스트 흐름 읽기
  • QByteArray readAll()//텍스트 흐름 읽기
  • QByteArray readLine()//텍스트 흐름 읽기
  •     qint64 write(const char * data, qint64 maxSize)
  •     qint64 write(const QByteArray & byteArray)

  • QT는 텍스트 파일과 데이터 파일의 읽기와 쓰기 작업을 간소화하기 위해 QTextStream과 QDataStream 보조 클래스를 제공합니다.QTextStream은 기록된 데이터를 모두 읽을 수 있는 텍스트로, QDataStream은 기록된 데이터를 유형에 따라 바이너리로 변환할 수 있습니다.
    QTemporaryFile는 QT의 임시 파일 작업 클래스로 전역에서 유일한 임시 파일을 안전하게 만들 수 있습니다. QTemporaryFile 대상이 소각될 때 대응하는 임시 파일은 삭제됩니다. 임시 파일의 열기 방식은 QIODevice: ReadWrite입니다. 임시 파일은 빅데이터 전달이나 프로세스 간 통신 장소에 자주 사용됩니다.
    QTemporaryFile tempFile;
    if( tempFile.open() )
    {  
        tempFile.write("D.T.Software");
        tempFile.close();
    }
    

    QDataStream Class
    데이터 흐름 작업 파일:
    흐름 객체 QDataStream date 만들기;
    int a= xxxx;
    string b = "xxxxxxxxx";
    데이터를 흐름에 저장date>>a>>b;
    int aa;
    string bb;
    흐름에서 데이터 가져오기 << aa < bb;
    QDataStream은 서로 다른 QT 버전에서 데이터 흐름 파일의 형식이 다를 수 있으므로 데이터 흐름 파일이 서로 다른 버전의 QT 프로그램 간에 전달되어야 할 때 버전 문제를 고려해야 한다.
    void setVersion(int v)
    int version() const
    QTextStream Class
    텍스트 조작 파일:
    흐름 객체 QTextStream date 만들기;
    date.setCodec();파일 읽기 인코딩 설정 지원(인코딩 문제 효과적으로 해결)

    QBuffer


    QBuffer 클래스는 QByteArray에 QIODevice 인터페이스를 제공합니다.
    현재는 캐시 파일을 만드는 것으로 이해한다.
    QT에 미리 정의된 버퍼의 클래스인 QBuffer는 버퍼를 특수한 IO 장치로 볼 수 있고 파일 흐름 보조 클래스는 버퍼를 조작하는 데 직접 사용할 수 있다.QBuffer 버퍼에서 쓰고 읽는 데이터는 같은 데이터 형식이어야 하며 여러 데이터 형식을 혼합할 수 없습니다.
    QBuffer의 사용 위치:
    A. 스레드 간 다양한 유형의 데이터 전송
    B. 캐시 외부 장치의 데이터 반환
    C. 데이터 읽기 속도가 쓰기 속도보다 작음

    요약:


    읽기와 쓰기 작업의 주요 방법은read()이다.readAll();readline(),write();

    부록:


    디렉토리 작업


    1、QDir


    QT에는 다음과 같은 디렉토리 작업 클래스인 QDir가 있습니다.
    A, 디렉터리 구분자 통일 사용'/'
    B. 디렉터리에 대해 임의의 조작을 할 수 있다(생성, 삭제, 이름 바꾸기)
    C. 지정된 디렉토리의 모든 항목(파일 및 폴더)을 가져올 수 있습니다.
    D. 필터 문자열을 사용하여 지정한 항목 가져오기
    E. 시스템의 모든 루트 디렉터리 가져오기
    QDir 사용 방법은 다음과 같습니다.
     QDir dir;
        QString path("../qt/test");
        if(!dir.exists())
        {
            dir.mkdir(path);
        }
        else
        {
            dir.cd(path);
            QStringList list = dir.entryList();
            for(int i = 0; i < list.count(); i++)
            {
                qDebug() << list[i];
            }
        }
    
    // 
    unsigned int FileSize(QString path)
    {
        QFileInfo info(path);
        unsigned int ret = 0;
        if(info.isFile())
        {
            ret = info.size();
        }
        else if(info.isDir())
        {
            QDir dir(path);
            QFileInfoList list = dir.entryInfoList();
            for(int i = 0; i < list.count(); i++)
            {
                if((list[i].fileName() != ".") && (list[i].fileName() != ".."))
                {
                    ret += FileSize(list[i].absoluteFilePath());
                }
            }
        }
        return ret;
    }

    2、QFileSystemWatcher


    QT에는 파일과 디렉터리의 변화를 모니터링하는 클래스인 QFileSystemWatcher가 미리 정의되어 있습니다.
    QFileSystemWatcher의 주요 기능은 다음과 같습니다.
    A. 특정 디렉토리 및 파일의 상태를 모니터링할 수 있음
    B. 여러 개의 파일과 디렉터리를 동시에 감시할 수 있다
    C. 디렉터리나 파일이 바뀔 때 신호를 터치합니다
    D. 신호와 슬롯의 메커니즘을 통해 신호를 포착하고 응답한다.
    일반적으로 QFileSystemWatcher를 사용하려면 사용자 정의 파일 모니터링 클래스가 필요합니다.
     
    전재 대상:https://www.cnblogs.com/flowingwind/p/8336159.html

    좋은 웹페이지 즐겨찾기