Dear Jos,

Copy, paste and enjoy reading your executables.

As a bonus, there's a byte counter.

See that where ++u is located it also adds the eof byte (it also 
belongs to the file, doesn't it?).

Wanting to disregard the eof byte place ++uu here: if (!f.eof()) 
{cout << byte; ++u;} else break;

Alternatively, leave ++u where it is and subtract 1 later.

# include <fstream>
# include <iostream>

using namespace std;

int main() {//1

char s[256];
cout << "File: ";
cin.getline(s, 256);
ifstream f(s, ios::binary);

if (!f.is_open()) {cout << "Error..." << '\n'; return -1;}

char byte;
unsigned u=0;

while (1) {//2
f >> byte;
++u;
if (!f.eof()) cout << byte; else break;
}//2

cout << "\nBytes: " << u;

f.close();

}//1


--- In [email protected], Jos Timanta Tarigan 
<[EMAIL PROTECTED]> wrote:
>
> I dont think im able to convert my class to use f >> byte. Maybe u 
should see the method i use. Its in the attachment. Somehow I get 
twice the last value '5'. Any got idea?
> 
> thanks in advance
> 
> ps: why cant i send a file with main.cpp attached?
> 
> --- On Thu, 10/9/08, py2akv <[EMAIL PROTECTED]> wrote:
> 
> > From: py2akv <[EMAIL PROTECTED]>
> > Subject: [c-prog] Re: Loop to Read Binary File
> > To: [email protected]
> > Date: Thursday, October 9, 2008, 10:59 AM
> > char byte;
> > ifstream f("file"); 
> > 
> > while (1) {
> > f >> byte;
> > if (!f.eof()) cout << byte << '\n';
> > else break;
> > }
> > 
> > Mind the break to escape the while on eof found: no
> > additional 
> > iteration.
> > 
> > The idea is here; modify at will!
> > 
> > Geraldo
> > 
> > 
> > --- In [email protected], Jos Timanta Tarigan 
> > <jos_t_tarigan@> wrote:
> > >
> > > Hi, 
> > > Im currently try to read a binary file. Im using this
> > loop
> > > 
> > > while(!f.eof() {do.something()}
> > > 
> > > to do the loop. I notice that this method is nor
> > recommended since 
> > there will be an additional loop at the end.  How can I
> > loop a binary 
> > file without using this loop? What is the other way to do
> > it? 
> > > 
> > > Thank you
> > > 
> > > 
> > > Regards
> > > 
> > > Jos Timanta Tarigan
> > >
> 
> 
>       
>   ----------
> 
> 
> #include <iostream>
> #include <fstream>
> #include <vector>
> using namespace std;
> 
> void writeToFile(ofstream &f, vector<int> &v)
> {
>       int type = 0;
>       cout<<"Printing vector" << endl;
>       for(int i = 0; i<v.size(); i++)
>       {
>               type = v.at(i);
>               f.write(reinterpret_cast<const char *>(&type), sizeof
(int));
>               cout << "Write type: " << type << endl;
>       }
> }
> 
> void readFromFile(ifstream &f, vector<int> &v)
> {
>       int type;
>       int i = 0;
>       while(f)
>       {
>               f.read(reinterpret_cast<char *> (&type), sizeof(int));
>               cout << "Type:" << type<< endl;
>               cout << i++ << endl;
>       }
> }
> 
> int main() {
>       
>       vector<int> v;
>       v.push_back(4);
>       v.push_back(5);
>       v.push_back(1);
>       v.push_back(8);
>       v.push_back(5);
>       
>       ofstream file;
>       file.open("testV.txt");
>       writeToFile(file, v);
>       cout << "FIle written"<<endl;
>       file.close();
>       
>       ifstream inFile;
>       inFile.open("testV.txt");
>       readFromFile(inFile, v);
>       inFile.close();
>       
>       return 0;
> }
> 
> 
> 
> 
> [Non-text portions of this message have been removed]
>


Reply via email to