如题,
QFile *loadFile=new QFile(loadFile_name);
QDataStream in(loadFile);
if(!loadFile->open(QIODevice::ReadOnly))
{
QMessageBox::warning(this,"Error","Cann't open file",QMessageBox::Ok);
ui->textEdit->insertPlainText(QString("open %1 failed\n").arg(loadFile_name));
auto_scroll();
return;
}
dataLen=in.readRawData(dataBuf,1024*200); //其中dataBuf为char类型预先申请的空间
请问 各位老大,采用上述的方法能够读取*.bin文件中的数据么?
------解决方案--------------------
文件的后缀并不能说明什么,除了大家约定俗成的文件格式,例如png、jgp等
这里楼主的代码是可以读出文件的,是以二进制的形式读出的,数据没有编码。
但数据具体代表什么还需要你对这里的bin文件具体怎么定义的有了解。
另外你可以根据dataLen的值来判断读取是否成功,没有成功dataLen=-1,成功dataLen=读取的字节数。
参考assistant:
int QDataStream::readRawData ( char * s, int len )
Reads at most len bytes from the stream into s and returns the number of bytes read. If an error occurs, this function returns -1.
The buffer s must be preallocated. The data is not encoded.
See also readBytes(), QIODevice::read(), and writeRawData().
------解决方案--------------------
除非你能确定这个bin文件是用 QDataStream生成的,否则不建议使用QDataStream
------解决方案--------------------
文件操作还是直接用C++的ifstream来读取,比较qt的简单得多。
file.open("test.bin",ios::binary
------解决方案--------------------
ios::ate);
int size=file.tellg(); //通过标志ate得到文件大小。
char* buf=new char[size];
file.seekg(0,ios::beg); //把读取位置重新写入文件开头。
file.read(buf,size);
file.close();