对于c++ 的标准数据格式的二进制读写直接进行操作就OK 了。这里说的是对qt的一些数据格式的读写要进行一些转化要求:
1.创建文件
bool createFile( QString fileName)
{
QFile file(fileName);
if(file.exists())
{
file.remove();
}
std::string fileName = fileName.toStdString();
FileStream = new fstream;
FileStream->open(fileName.c_str(),ios_base::in|ios_base::out|ios_base::app);
return true;
}
2. 打开文件:
bool openFile(QString strFileName)
{
std::string fileName = strFileName .toStdString();
FILE *fp = fopen(fileName.c_str(), "rb");
if(NULL == fp)
{
return false;
}
fclose(fp);
FileStream = new fstream ;
FileStream->open(fileName.c_str(),ios_base::in|ios_base::out|ios_base::app);
return true;
}
3.写文件
bool writeFile(void * inData/*编写数据集合")
{
if(FileStream == NULL)
{
return false;
}
//z在这里只写QT特殊的几个类型转化为c++的标准类型进行写
QString strTempName = "wesleywe wei";
int nameCount = strTempName .size();
FileStream->write((char*)&nameCount ,sizeof(int));
QByteArray baName = strTempName .toLatin1();
const char *c_strName = baName .data();
char cTempName;
for(int i = 0;i<nameCount ;i++)
{
cTempName=strName
;
FileStream->write((char*)&cTempName,1);
}
//其他的类型也一样先转换为QString 类型然后按照上面进行写入
return true;
}
4.读文件
bool readFile(void * outData/*编写返回数据集合")
{
if(FileStream == NULL)
{
return false;
}
int dataCount;
FileStream->read((char*)&dataCount,sizeof(int));
char cTempDate;
QString strTempDate;
for(int i = 0;i<dataCount;i++)
{
FileStream->read((char*)&cTempDate,1);
strTempDate.append(cTempDate);
}
return true;
}
5.关闭文件
bool closeFile()
{
FileStream->close();
delete FileStream;
FileStream = NULL;
return true;
}
以上是文件格式定义,然而读写很不灵活,还有另一种方法是增加读写的灵活性和安全性,比如dicom 文件格式那样的。希望同行对二进制文件的操作提出更深入的见解和方法,以及文件的格式定义方法的探讨,尤其是对大文件的操作.[ 此帖被wesleywei在2010-01-12 08:49重新编辑 ]