将固定长度的记录写入文件 C++
Writing Fixed length records into a file c++
我正在尝试写入 N 条结构类型的固定长度记录
const int N = 101;
char dummay[] = "#####";
struct hashTable
{
char name[51];
int RRN;
};
int main(){
fstream f("hashFile.txt");
f.seekp(0,ios::beg);
hashTable h;
for (int i = 0 ; i < N ; i++ ) {
strcpy(h.name,dummay);
h.RRN = i;
f.write((char*)&h,sizeof h);
}
当我再次尝试输出这些记录时,只有前 25 条记录工作正常!
f.seekp(0,ios::beg);
for (int i = 0 ; i < N ; i++ )
{
f.read((char*)&h,sizeof h);
cout << h.RRN << endl << h.name << endl;
}
完整code,为什么会出现这种情况以及如何解决?!
您显然是在将二进制数据写入您的文件(int、名称中的空终止符以及可能跟在名称后面的 45 个垃圾字符)。
所以用二进制模式打开它就可以了:
fstream f("hashFile.txt", ios::binary);
在文本模式下读取文件时,根据您的 os,一些二进制字符可能被解释为文件结束标记。例如Ctrl+Z on windows(碰巧是ascii码26)
我正在尝试写入 N 条结构类型的固定长度记录
const int N = 101;
char dummay[] = "#####";
struct hashTable
{
char name[51];
int RRN;
};
int main(){
fstream f("hashFile.txt");
f.seekp(0,ios::beg);
hashTable h;
for (int i = 0 ; i < N ; i++ ) {
strcpy(h.name,dummay);
h.RRN = i;
f.write((char*)&h,sizeof h);
}
当我再次尝试输出这些记录时,只有前 25 条记录工作正常!
f.seekp(0,ios::beg);
for (int i = 0 ; i < N ; i++ )
{
f.read((char*)&h,sizeof h);
cout << h.RRN << endl << h.name << endl;
}
完整code,为什么会出现这种情况以及如何解决?!
您显然是在将二进制数据写入您的文件(int、名称中的空终止符以及可能跟在名称后面的 45 个垃圾字符)。
所以用二进制模式打开它就可以了:
fstream f("hashFile.txt", ios::binary);
在文本模式下读取文件时,根据您的 os,一些二进制字符可能被解释为文件结束标记。例如Ctrl+Z on windows(碰巧是ascii码26)