最近做一个工程需要记录日志,限于硬件问题无法使用数据库一类的,故决定采用txt文件存储日志信息。
这里需要对每一个用户建立一个文件夹,在QT里面可以这样写:
QDir dir;
if(!dir.exists(dirName)) //dirname即为你要创建的文件夹名字
dir.mkdir(dirName);
这样创建的文件夹会位于程序所在的目录下,若需要文件夹在程序的上一级目录里。可以加一句
dirname="../"+dirname;
至于文本文件的读写操作
参考:http://blog.csdn.net/xgbing/article/details/7772953
二进制文件的读写文件可以使用QFile类、QStream
文本文件的读写建议使用QTextStream类,它操作文件更加方便。
打开文件时,需要参数指定打开文件的模式:
打开模式具体怎么选自行组合即可。
模式 | 值 | 描述 |
QIODevice::NotOpen | 0x0000 | 不打开 |
QIODevice::ReadOnly | 0x0001 | 只读方式 |
QIODevice::WriteOnly | 0x0002 | 只写方式,如果文件不存在则会自动创建文件 |
QIODevice::ReadWrite | ReadOnly | WriteOnly | 读写方式 |
QIODevice::Append | 0x0004 | 此模式表明所有数据写入到文件尾 |
QIODevice::Truncate | 0x0008 | 打开文件之前,此文件被截断,原来文件的所有数据会丢失 |
QIODevice::Text | 0x0010 | 读的时候,文件结束标志位会被转为’\n’;写的时候,文件结束标志位会被转为本地编码的结束为,例如win32的结束位’\r\n’ |
QIODevice::UnBuffered | 0x0020 | 不缓存 |
QIODevice::Text在读写文本文件时使用,这样可以自动转化换行符为本地换行符。
(1)写入文本文件
void dataOperator::fileWrite(QString path)
{
QFile f(dirName+"/"+path+".txt");
//如果不加QIODevice::Append,每次写入都会覆盖原文本
if(!f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
{
qDebug()<< "Open failed.";
return;
}
QTextStream txtOutput(&f);
QString s1("123");
quint32 n1(123);
txtOutput << s1<<" ";
txtOutput << n1 << endl;
f.close();
}
写入文件为
123 123
(2)读取文本文件
void dataOperator::fileRead(QString path)
{
QFile f(dirName+"/"+path+".txt");
if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Open failed.";
return;
}
QTextStream txtInput(&f);
QString lineStr;
while(!txtInput.atEnd())
{
lineStr = txtInput.readLine();
qDebug() << lineStr;
}
f.close();
}