QT5 파일 읽기/쓰기 작업
QFile Class
1. read 읽기 파일
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 파일 쓰기
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();
}
세부 최적화 처리
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은 다음과 같은 주요 함수 인터페이스를 통해 텍스트 파일 및 데이터 파일 작업을 직접 지원합니다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.