文件IO(File IO)

通常我们都需要从读写文件。QFile是一个QObject对象,但是大多数情况下它被创建在栈上。QFile包含了通知用户数据可读取信号。它可以异步读取大段的数据,直到整个文件读取完成。为了方便它允许使用阻塞的方式读取数据。这种方法通常用于读取小段数据或者小型文件。幸运的是我们在这些例子中都只使用了小型数据。

除了读取文件内容到内存中可以使用QByteArray,你也可以根据读取数据类型使用QDataStream或者使用QTextStream读取unicode字符串。我们现在来看看如何使用。

  1. QStringList data({"a", "b", "c"});
  2. { // write binary files
  3. QFile file("out.bin");
  4. if(file.open(QIODevice::WriteOnly)) {
  5. QDataStream stream(&file);
  6. stream << data;
  7. }
  8. }
  9. { // read binary file
  10. QFile file("out.bin");
  11. if(file.open(QIODevice::ReadOnly)) {
  12. QDataStream stream(&file);
  13. QStringList data2;
  14. stream >> data2;
  15. QCOMPARE(data, data2);
  16. }
  17. }
  18. { // write text file
  19. QFile file("out.txt");
  20. if(file.open(QIODevice::WriteOnly)) {
  21. QTextStream stream(&file);
  22. QString sdata = data.join(",");
  23. stream << sdata;
  24. }
  25. }
  26. { // read text file
  27. QFile file("out.txt");
  28. if(file.open(QIODevice::ReadOnly)) {
  29. QTextStream stream(&file);
  30. QStringList data2;
  31. QString sdata;
  32. stream >> sdata;
  33. data2 = sdata.split(",");
  34. QCOMPARE(data, data2);
  35. }
  36. }