写这篇博文的前一分钟,我是处在自闭之中的。
那么先说说QDataStream是什么玩意儿吧,看名字也知道,这是一个流,那么其作用是什么呢?其作用就像fstream那样,是对文件进行操作的。只不过它不是以文本的形式把数据写入文件,而是以二进制的形式把数据写入文件的。就像C语言能够直接把结构体写入文件,读出来的还是个结构体一样,这个是能够把任意数据类型写入文件,然后只要按照对应的类型读取,都能够读出来。
那么先看把数据写入文件的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| QFile fll("../new.txt");
if(fll.open(QFile::WriteOnly)) { QDataStream ds(&fll); QString qs("Hello"); int i = 1; ds << qs << i; fll.close(); }
else std::cout << "Open Error" << std::endl;
|
下面是读的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| QFile fl("../new.txt");
if(fl.open(QIODevice::ReadOnly)) { QDataStream ds(&fl); QString qs; int i; ds >> qs >> i; std::cout << qs.toUtf8().data() << std::endl; std::cout << i << std::endl; fl.close(); } else { std::cout << "Read Error." << std::endl; }
|
然后我们先执行写的代码,再紧接着执行读的代码,输出如下:
1 2 3 4
| 15:53:51: Starting /home/fire/codeSet/QtSet/build-untitled12-unknown-Debug/untitled12 ... Hello 1 15:53:53: /home/fire/codeSet/QtSet/build-untitled12-unknown-Debug/untitled12 exited with code 0
|
可以看到,我们以什么格式写进去的,以什么格式读出来就会原样读取。
但是如果写的格式与读的格式不一样呢?
请看示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| QFile fll("../new.txt"); if(fll.open(QFile::WriteOnly)) {
QDataStream ds(&fll);
int i = 1;
ds << "Hello" << i; fll.close(); } else std::cout << "Open Error" << std::endl;
QFile fl("../new.txt"); if(fl.open(QIODevice::ReadOnly)) { QDataStream ds(&fl); QString qs; int i; ds >> qs >> i; std::cout << qs.toUtf8().data() << std::endl; std::cout << i << std::endl; fl.close(); } else { std::cout << "Read Error." << std::endl; }
|
这里我只更改了写的代码,读的代码还是以之前一样。
这是输出结果:
1 2 3 4
| 15:56:08: Starting /home/fire/codeSet/QtSet/build-untitled12-unknown-Debug/untitled12 ... 䡥汬漀 1 15:56:10: /home/fire/codeSet/QtSet/build-untitled12-unknown-Debug/untitled12 exited with code 0
|
因为QString和字符串字面量(其实这里的字符串字面量的真实面目并不是std::string,而是const char*类型的数组)的类型不同,所以读出来的也不同。关于为什么int类型能够正常读出来我也不知道。
本篇完。