第一步:手动获取文件路径:
#include<QFileDialog>//获取文件路径头文件
代码:
QString filcnamc=QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\ym\\Desktop\\zy");
第二步文件操作:
//------------------------已读方式打开文件------------------------//
QFile file(filcnamc);//填充文件路径
file.open(QIODevice::ReadOnly);//以读的方式打开文件
//----------------------------一次性全部读出文件内容------------------------------------//
QByteArray arary=file.readAll();//一次性全部读出文件内容
//----------------------------------------------------------------//
//------------------------------每次读取一行-------------------------//
QByteArray arary_2;
while (!file.atEnd()) { //file.atEnd()判断还有没有可以读取的也就是判断是否为空
arary_2+=file.readLine();//读取一行
}
//-------------------------------关闭文件---------------------------------------//
file.close();//关闭文件
//------------------------以写入的方式打开文件----------------------------------//
file.open(QIODevice::Append);//以在末尾追加写入的方式打开文件
file.write("I love you ,Rick!");//写入的内容
file.close();//关闭文件
第三步:获取文件属性
1.查看文件属性需要的头文件
#include<QFileInfo>//查看文件属性
#include<QDebug>
#include<QDateTime>//用来输出文件生成时间
2代码
QFile file("C:\\Users\\ym\\Desktop\\zy");
QFileInfo info(file);
qDebug()<<"绝对路径: "<<info.absoluteFilePath();
qDebug()<<"文件名:"<<info.fileName();
qDebug()<<"后缀名:"<<info.suffix();
qDebug()<<"创建时间"<<info.created();
qDebug()<<"创建时间"<<info.created().toString("yyyy.MM.dd hh:mm:ss");
qDebug()<<"文件大小:"<<info.size();
第四步定位读取:
void MainWindow::wjdw()//文件定位读取
{
QFile file("C:\\Users\\ym\\Desktop\\zy");
QFileInfo info(file);
file.open(QIODevice::ReadOnly);//以只读的方式打开文件
file.seek(0);//定位文件指针位置为0
QByteArray array=file.read(5);//读取到第5个
qDebug()<<"前5个字节: "<<array;
qDebug()<<"当前位置: "<<file.pos();
file.seek(15);
array=file.read(5);
qDebug()<<"第16到第20个字节:"<<array;
file.close();
}
第五块内容文件和文件夹的显示和监视文件或者文件夹有无发生改变
需要的全部头文件
#include<QDebug>
#include<QDir>//操作文件夹
#include<QFileSystemWatcher>//文件夹监视器
1.显示选顶文件夹下的所有文件和目录
QDir myDir("D:\\xnj");//设置当前文件夹
myDir.absolutePath();//显示当前路劲下的文件和文件夹
myDir.entryList();//显示
2.指定文件后缀名显示选顶文件夹下的文件
QDir myDir("D:\\xnj");//设置当前文件夹
myDir.setNameFilters(QStringList("*.cpp"));//只显示后缀名为.cpp的
myDir.entryList();//显示
3.在当前选定目录下生成文件夹
QDir myDir("D:\\xnj");//设置当前文件夹
myDir.mkdir("mydir"); //在当前路径创建一个文件夹
4.文件文件夹监视器
//-------------------声明一个槽函数------------------------//
private slots:
void showMessage(const QString &path);//文件监控槽函数
//--------------------------------------------------------//
//-------------------定义槽函数----------------------------//
void MainWindow::showMessage(const QString &path)//文件夹监视槽函数
{
if(path=="D:\\xnj\\mydir")
{
//文件夹
}
else if(path=="D:\\xnj\\yy.txt")
{
//文件
}
}
//--------------------操作代码-------------------------------------------//
QDir myDir("D:\\xnj");//设置当前文件夹
connect(&myWatcher,&QFileSystemWatcher::directoryChanged,this,&MainWindow::showMessage);//监视文件夹有没有发生改变
connect(&myWatcher,&QFileSystemWatcher::fileChanged,this,&MainWindow::showMessage);
//监视文件有没有发生改变
myWatcher.addPath("D:\\xnj\\mydir");
myWatcher.addPath("D:\\xnj\\yy.txt");
//----------------------------------------------------------------------//
6.文本流与数据流(传输文件)
文本流头数据流头文件
#include<QTextStream>//文本流
#include<QDataStream>//数据流
1.文本流的读取
//-----------------------------文本流读取---------------------------------------------//
QString filcnamc=QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\ym\\Desktop\\zy"); QFile file(filcnamc);//填充文件路径
file.open(QIODevice::ReadOnly);//以读的方式打开文件
QTextStream stream(&file);
stream.setCodec("utf-8");
QByteArray arary_2;
while (!stream.atEnd()) //stream.atEnd()判断还有没有可以读取的也就是判断是否为空
{
arary_2+=stream.readLine();//读取一行
}
file.close();
//----------------------------数据流读取写------------------------------------------//
QFile file_2("C:\\Users\\1.txt");
file_2.open(QIODevice::WriteOnly);//以写的方式打开
QDataStream data_stream(&file);//创建数据流
data_stream<<QString("jfesfesf")<<(qint32)65;
file_2.close();
file_2.open(QIODevice::WriteOnly);//以读取的方式打开
QDataStream data_in_stream(&file);//创建数据流
QString str;
qint32 n;
data_in_stream>>str>>n;
//-----------------------------------------------------------------------------------//
总结:我本流与操作系统有关系可能会出现乱码,大小端不一致,而数据流与操作系统无关所以适合文件传输