对于使用　QIODevice::WriteOnly　只写模式打开的文件,通常文件游标总是指向文件末尾,这时候调用　read()　没意义,所以　read()　返回值就是　-1。　手动分配缓冲区其实是比较麻烦的事情,我们　Qt　原生态的读取函数应该用下面这个:　QByteArray　QIODevice::read(qint64　maxSize)　这里的　read()　函数会把读取的字节数组存到　QByteArray　对象并返回,参数里的　maxSize　就是最多读取的字节数目。返回的　QByteArray　对象里面,可以用　QByteArray　自己的　QByteArray::size()　函数判断读了多少字节,如果文件后面没字节可读或读取错误,那么　QByteArray　尺寸就是　0　。　QByteArray　QIODevice::readAll()　readAll()　函数看名字就知道,把文件的全部内容直接读取到　QByteArray　对象然后返回。　另外还有两个更实用的读取行的函数:　qint64　QIODevice::readLine(char　*　data,　qint64　maxSize)　QByteArray　QIODevice::readLine(qint64　maxSize　=　0)　第一个　readLine()　是程序员手动分配缓冲区,第二个不需要手动分配缓冲区。　readLine()　函数工作特性比较特殊,它是从文件或设备里面读取一行　ASCII　字符,最多读取　maxSize-1　字节,因为最后一个字节预留给字符串结尾NULL字符　。　该函数返回值是真实读取的字节数目,如果读取出错或无数据可读就返回　-1。　readLine()　总会在实际读取的字符串末尾会自动添加一个字符串终结符　0　。　readLine()　会一直读取数据直到如下三个条件之一满足:　①　第一个　'\n'　字符读取到缓冲区。　②　maxSize　-　1　字节数已读取,最后一个字节预留给　0　。　③　文件或设备读取已经到末尾。　对于第一个终止条件,真实读取到了　'\n'　字符,那么这个换行字符会填充到缓冲区里面;　对于第二个和第三个终止条件,是没有读到　'\n'　字符,那么该函数不会自动添加换行符到末尾。　还有一个特殊情况要注意,readLine()　函数会把　Windows　的文