我编写了一个函数,该函数列出了我的二进制文件,并使用fwrite func从我的结构中写入该文件:

void ReadFile::printList(){
clearerr(bookFilePtr);
fseek(bookFilePtr,0L,SEEK_SET); // set to begin of file
int counter = 1;
cout << "***************************************************" << endl;
struct book tmp ;
while (!feof(bookFilePtr)){
            fread(bookPtrObj,sizeof(struct book),1,bookFilePtr);
    cout << bookPtrObj->name << "s1"<< endl;
    cout << bookPtrObj->publisher << "s2"<< endl;
    cout << bookPtrObj->author << "s3" <<endl;
    cout << bookPtrObj->stock << endl;
    cout << bookPtrObj->translation << endl;
    cout << bookPtrObj->trasnlator << "s4" <<endl;
    cout << bookPtrObj->delayDays << endl;
    cout << bookPtrObj->delayPay << endl;
    cout << "***************************************************" << endl;
    fseek(bookFilePtr,counter * sizeof(struct book) ,SEEK_SET); // seek to next data
    counter ++;
}

它为我的所有文件打印一次,但是没有退出循环。并且我的函子继续打印文件中的最后一个数据。如何退出我的函子并找出文件末尾? fseek有效吗?

最佳答案

while(!feof(bookFilePtr))是执行阅读循环的不好方法。 !feof(...)不保证读取成功。您应该在fread成功执行时循环。

while(fread(bookPtrObj, sizeof(struct book), 1, bookFilePtr) == 1) {
    //  blah blah do the things
}

fseek的调用也是多余的:fread已经使文件游标本身前进了,因此您无需查找。

关于c++ - 为什么fseek不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8543882/

10-11 16:58