Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   Binary File Error (http://www.go4expert.com/forums/binary-file-error-t28307/)

NatProg 30Apr2012 12:51

Binary File Error
 
The code compiles but does not record (or) show the data properly. It only displays the last entered data. I couldn't figure out what exactly is wrong.
I would really appreciate any help

HTML Code:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include<string.h>

using namespace std;

//prototypes:
void findEntry(fstream&);
void addNewEntry(fstream&);
char *encrypt(char *var);
char *decrypt(char *var);
void printData(fstream&);

struct Data
{
        char username[20], password[30], info[50], website[30];
};
int main()
{
        fstream ioFile("Record2.ros",  ios::out | ios:: in | ios::binary);
        if(!ioFile){
                  cout << "Error opening file! Aborting ...";
                  return 0;
        }
        ioFile.clear();
    int choice;
    bool ex = true;
    while(ex == true){
    //Menu:
    cout << " Main Manu\n 1-Add New Entry\n 2-Find an Entry\n 3-Print All Data\n 4-Exit";
    cout << "Enter your choice: ";
    cin >
> choice;
    while(choice > 4 || choice < 1)
    {
        cout << "choose between 1-4: ";
        cin >
> choice;
    }

    switch(choice)
    {
        case 1:
              addNewEntry(ioFile);
              break;
        case 2:
              //findEntry(ioFile);
              break;
        case 3:
              printData(ioFile);
              break;
        default:
              cout << "Exiting ..." << endl;
              ex = false;
              break;
    }
    }
    system("pause");
    ioFile.close();


    return 0;
}
void printData(fstream& ioFile)
{
       
        Data dataObj;

        ioFile.read(reinterpret_cast<char *>
(&dataObj), sizeof(dataObj));
        ioFile.seekg(0L, ios::beg);//move to the first byte
        while(! ioFile.eof())
        {
                //ioFile.read((char *)&dataObj, sizeof(dataObj));

                cout << "Printing Data:" << endl;                                                                //Read & Write the Website info:

                cout << "Website: " << decrypt(dataObj.website) ;
                                                                                                                                                //Read & Write the UserName:
                cout << "\tUser Name: " << decrypt(dataObj.username) ;
                                                                                                                                                //Read & Write the Password:
                cout << "\tPassword: " << decrypt(dataObj.password);
                                                                                                                                                //Read & Write the Info:
                cout << "\nInfo: " << decrypt(dataObj.info);
                                                                                                                                                //Write Object to file:
                cout << endl;
                ioFile.read(reinterpret_cast<char *>
(&dataObj), sizeof(dataObj));
        }

}

void addNewEntry(fstream& ioFile)
{
    //ofstream ofs("Records2.ros", ios::binary);

    Data dataObj;
    char temp[100];
    cout << "New Entry" << endl;
                                                                                            //Read & Write the Website info:
    cout << "Enter the website Name: ";
    cin >
> temp;
    encrypt(temp);
    strcpy(dataObj.website, temp);
                                                                                            //Read & Write the UserName:
    cout << "Enter the User Name: ";
    cin >
> temp;
    encrypt(temp);
    strcpy(dataObj.username, temp);
                                                                                            //Read & Write the Password:
    cout << "Enter the Password: ";
    cin >
> temp;
    encrypt(temp);
    strcpy(dataObj.password, temp);
                                                                                            //Read & Write the Info:
    cout << "Enter Any Additional Info (up to 100 character): ";
    cin >
> temp;
    encrypt(temp);
    strcpy(dataObj.info, temp);
                                                                                            //Write Object to file:
    ioFile.seekp(0L, ios::end);//Move to the last byte
    ioFile.write(reinterpret_cast<char *>(&dataObj), sizeof(dataObj));//write the record
    cout << "Entry Added!" << endl;
}

char *encrypt(char *var)
{
    return var;
}

char *decrypt(char *var)
{
    return var;
}


xpi0t0s 2May2012 12:36

Re: Binary File Error
 
Shouldn't printData move to the beginning of the file _before_ reading anything from it?

Have you checked there are multiple rows of data in the file when you call printData (e.g. by viewing it in Notepad or similar)?


All times are GMT +5.5. The time now is 20:52.