delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/08/05/02:32:30

From: "David Lee" <keeyu AT poetic DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: seekg() bug
Date: Sat, 5 Aug 2000 13:43:33 +0800
Organization: IMS Netvigator
Lines: 41
Message-ID: <8mg9j5$fis3@imsp212.netvigator.com>
NNTP-Posting-Host: wtstnt04068.netvigator.com
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

I opened a fstream object and tried to position the file pointer with seekg
().

I found that seekg () always worked as long as eof () was not encountered.
Once eof () holds, it would appear to work as usual, but subsequent reading
from the fstream object were wrong.

Any idea?

Here is what I mean:

#include <fstream>

void
main ()
{
    fstream f ("dummy", ios::out | ios::bin);
    f.write ("0123456789", 10);
    f.close ();

    f.open ("dummy", ios::in | ios::bin);

    f.seekg (4, ios::beg);
    char x;
    f.read (&x, 1);
    cout << x << endl;        // print 4, as expected

    while (!f.eof ())            // goto end of file
        f.read (&x,1);

    // now f.eof () holds.
    f.seekg (7, ios::beg);
    f.read (&x, 1);
    cout << x << endl;        // does **NOT** print 7 (in fact, it prints 4,
the previous input).

    f.close ();
}



- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019