From: pjfarley AT dorsai DOT org (Peter J. Farley III) Newsgroups: comp.os.msdos.djgpp Subject: Re: Problem with fstreams... Date: Thu, 28 Aug 1997 01:55:52 GMT Organization: None Lines: 65 Message-ID: <3404d95c.30236248@snews.zippo.com> References: <5tps7b$rpo$1 AT news DOT sendit DOT nodak DOT edu> <5tq24a$b6$1 AT news DOT sendit DOT nodak DOT edu> NNTP-Posting-Host: news.newsdawg.com To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk adalee AT sendit DOT sendit DOT nodak DOT edu (Adam W Lee) wrote: >Adam W Lee (adalee AT sendit DOT sendit DOT nodak DOT edu) wrote: >: I'm trying to write a program to read a file and write it to another file >: in C++, but my program quits like halfway through the file with a read >: error or something to that effect... Here's some pseudo-code. Adam, I took your example and tried it myself, and yes, it fails as you say. After a little experimentation, I found a version that works perfectly under DJGPP. It seems that the "ios::in" and "ios::out" are *required* in the open process, even though the files are declared ifstream and ofstream, respectively. Please try my version to confirm. #include int main(int argc, char *argv[]) { char temp[1025]; if(argc<3) { cout << "Usage: " << argv[0] << " " << endl; return 1; } ifstream in; // in.open(argv[1], ios::binary); <=== THIS FAILS in.open(argv[1], ios::in | ios::binary); // THIS WORKS if(in.fail()) { cout << "Error opening " << argv[1] << endl; return 2; } ofstream out; // out.open(argv[2], ios::binary); <=== THIS FAILS out.open(argv[2], ios::out | ios::binary); // THIS WORKS if(out.fail()) { cout << "Error opening " << argv[2] << endl; cout << "Error opening " << argv[2] << endl; return 3; } while (!in.eof()&&!in.fail()&&!out.fail()) { in.read(temp,1024); cout << "Length read was " << in.gcount() << endl; cout << "in.eof=" << in.eof() << ", in.fail=" << in.fail() << ", out.fail=" << out.fail() << endl; out.write(temp, in.gcount()); } out.flush(); if(in.eof()) cout << "End of file reached." << endl; if(in.fail()&&!in.eof()) cout << "Error reading " << argv[1] << "." << endl; if(out.fail()) cout << "Error writing " << argv[2] << "." << endl; in.close(); out.close(); return 0; } ---------------------------------------------------- Peter J. Farley III (pjfarley AT dorsai DOT org)