将固定长度记录写入文件c ++

问题描述 投票:1回答:1

我正在尝试编写类型为struct的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,为什么会发生这种情况以及如何解决它?

c++ file fstream fixed-length-record
1个回答
2
投票

您显然是在文件中写入二进制数据(int,名称中的null终止符和可能跟随名称的45个垃圾字符)。

所以在二进制模式下打开它会很好用:

fstream f("hashFile.txt", ios::binary); 

在文本模式下读取文件时,根据您的操作系统,某些二进制字符可能会被解释为文件结束标记。例如Ctrl+Z on windows(偶然发生ascii代码26)

© www.soinside.com 2019 - 2024. All rights reserved.