2022年QT文件读写 .pdf
QT 读取中文文件时间: 2010-03-25 10:41:00 来源:作者:固然 C+ 尺度中有了文件读取的相干类,也很好用,但是在涉及到QT 编程的时候却用起来不便利了,由于QT 本身很多组件都是关联的自身的QString类型的字符串,所以再用C+ 本身 String类型的时候就不是那么便利了,须要进行转化,这样给程序带来了庞杂度,同时也带来了转化的开销,所以假如用QT 开发,可以就用它本身所带的这些类型进行处置,形成一个体系,便于数据在程序之中的交互和共用。 QT很好,但是在处理中文或者其他语言的时候要注意编码格式,如果没有注意,读取文件的时候可能读出来的就是乱码或者干脆程序就逝世掉了,这是我们所不愿意看到的,下面就讲讲怎么样通过QT 的类来读取中文文件。先容部分我们须要用到几个头文件中的类:#include #include #include #include QSt ring QSt ring 类提供了一个 Unicode文本和经典的 C 以零结尾的字符数组的抽象。QSt ring 应用隐含共享,这使它非常有效力并且很轻易使用。所有的 QString的方式都使用 const char *参数,const char *被说明为经典的 C 作风的以零结尾的 ASCII字符串。所以 const char * 参数为 0 是正当的。如果const char * 不是以零结尾的,成果是不断定的。把经典的C 字符串复制到 QString的函数将不会复制结尾的0 字符。QString的 QChar 数组(可以通过 unicode()返回)通常不以零结尾。如果你须要把 QString传递到一个需要 C 的以零结尾的字符串,请使用latin1()。没有分配任何东西的QString是零, 也就是长度和数据指针都为0。 引用空字符串(“”, 一个单一的 0 字符) 的 QString是空。零和空这两个QString在方式中都是正当的。把(const char *) 0赋值给 QString给定了一个零 QString 。为了方便, QString:null是一个零 QString 。当排序的时候,空字符串在最前面,然后是非空字符串,然后才是零字符串。我们建议使用if ( !str.isNull() ),而不是 if ( !str )来检测非零字符串,关于说明阐明也可以参考operator!()。注意如果你发明你正在混杂使用QCString、QSt ring 和 QByt eArray ,这将会导致很多不必要的复制并且也许会预示着你正在处理的真实自然数据是不断定的。如果数据是以零结尾的八位数据,请使用QCSt ring ;如果它是没有结尾的(也就是包括 0)八位数据,请使用QByteArray;如果它是文本,请使用QSt ring 。字符串列表可以使用QStringList类来处置。你可以使用 QStringList:split()来把一个字符串分割为一个字符串列表,并且可以使用 QStringList:join()把一个字符串列表衔接成一个使用随便间隔符的字符串。你也可以使用QSt ringList:grep()从一个字符串列表中获得包括特定子字符串或者包括匹配特定的regex 的字符串列表。/ QFile QFile 类是一个操作文件的输进/ 输出装备。QFile 是用来读写二进制文件和文本文件的输入/输出装备。QFile 可以自己单独被使用, 但是如果和 QDat aStream或QText Stream一起使用将更加便利。文件名通常可以通过结构函数来传递,但也可以使用setName()来设置。你可以通过exists()来检讨一个文件是否存在并且可以通过remove()来移往一个文件。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 文件可以用 open() 来打开、用 close() 来封闭、用flush()来刷新。数据通常可以使用 QDataStream或者 QText Stream进行读写,但你也可以使用readBlock()和 readLine()来读,使用 writeBlock()来写。QFile 也支撑 getch()、unget ch() 和 putch()。size() 可以返回文件的大小。你可以通过使用at() 函数得到当前文件地位或者移到一个新的文件地位。假如你到了文件的末尾, atEnd()返回真。 handle() 返回文件句柄。这里是一个使用QTextSt ream来一行一行地读取一个文本文件的代码段。它会把每一行带上一个行号打印出来。 QSt ringList lines; QFile file( file.txt ); if ( file.open( IO_ReadOnly ) ) QTextStream stream( &file ); QString line; int n = 1,女孩叫你一声老公 ; , 最新开的征途 sf; while ( !stream.eof() ) line = stream.readLine(); / 不包含“n” 的一行文本 printf( %3d: %sn, n+, line.latin1() ); lines += line; file.close(); 写文本也很轻易(假设我们有一个行的字符串列表要写): QFile file( file.txt ); if ( file.open( IO_WriteOnly ) ) QTextStream stream( &file ); for ( QStringList:Iterator it = lines.begin(); it != lines.end(); +it ) stream *it ()重载操作符读到恰当类型的变量中,【做 你 的 红 颜 】,或者使用 read() 把它作为全部部分读到一个单一的字符串中,或者使用readLine()把一次读一行。使用skipWhiteSpace()可以疏忽把持符。你可以使用 flags() 或 setf()来设置流的标志。 这个流也支撑 width()、precision()和 fill(),使用 reset()可以重新恢复默认设置。也可以参考 QDataStream、输入 /输出和网络和文原形关类. / QText Codec QText Codec 类供给文本编码之间的转换。QT 使用 Unicode来存储,绘制以及操作字符串。在很多情形下,你可能想要应用不同的编码方法来处置数据。例如大部分的日语文件都被存储在Shift-JIS或者 ISO2022的文件中,而俄罗斯的用户经常使用KOI8-R或者 CP1251编码方法。 QT 供给了一个 QText Codec 类聚集来从 Unicode格局转化到相应的格局。/ 代码部分#include #include #include #include int main() QFile file(test.txt); if (file.open(IO_ReadOnly|IO_Raw) QTextStream floStream(&file); QString line; , 转载:你的手上有几个斗?;QText Codec *codec=QTextCodec:codecForName(GBK); floStream.setCodec(codec); while ( floStream.atEnd()=0 ) line = codec-fromUnicode(floStream.readLine(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - qWarning(line); file.close(); return 0; 代码中的重要修改就是黄底的部分意思就是创建一个中文GBK 编码样式,然后依照这种方法来把读入的文件流进行重新编码,这样中文就可以顺利输出了,不信你可以试一试,哈哈,先先容这么多,下次有什么下次再写啦。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -