I'm having problems with the basics of binary file i/o. I really don't know too much about file i/o so far, so I'll try to describe my question as best I can.
What I'm trying to do is to create a simple hash file with 7 buckets while each bucket holds 2 entries and utilize them. So far, I been able to create a blank table, but I haven't been able to write to any of the buckets, at least in the way that I want to. I find the correct offset but the blank table gets wiped up until the point where I want to write and after it gets removed. I checked this with a hex editor.
So, what I think i want to ask is - how can I open a existing file to modify in binary? or how do i change one of the entries in the blank hash table/file?
I think what I've put in bold below is what has been causing my problems. I think im lost : /
thanks for any insight/advice.
(most of this is incomplete)
funcs.cpp
main.cppCode:#include "func.h" #include <iostream> #include <fstream> using namespace std; HashFile::HashFile(int n, int r) { tableSize = n; bucketSize = r; /******************* initialize table assist *********/ tableAssist = new int[tableSize]; for (int j = 0; j < tableSize; j++) { tableAssist[j] = 0; } /**** create Table size * bucket size blank entries ****/ DataRec tempDataRec; tempDataRec.id = 0; ofstream outfile("Bout", ios::out); for (int i = 0; i < tableSize * bucketSize; i++) { outfile.seekp( i * sizeof(DataRec) ); outfile.write( (char *) &tempDataRec, sizeof(DataRec) ); } outfile.close(); } int HashFile::store(const DataRec &data_rec) { ofstream outfile; outfile.open("Bout", ios::out); int temp = h(data_rec.id); if (tableAssist[temp] == 0) { outfile.seekp( temp * sizeof(DataRec) ); outfile.write( (char *) &data_rec, sizeof(DataRec) ); tableAssist[temp]++; return 0; } if (tableAssist[temp] == 1) { outfile.seekp( (temp+1) * sizeof(DataRec) ); outfile.write( (char *) &data_rec, sizeof(DataRec) ); tableAssist[temp]++; return 0; } if (tableAssist[temp] == 2) //h2 - double hash { temp = h2(data_rec.id); } /* */ return -1; } int HashFile::h(int k) { return (k % tableSize); } int HashFile::h2(int k) { return (k % (tableSize - 1) + 1); }
func.hCode:#include <iostream> #include "func.h" using namespace std; int main() { DataRec temp; temp.id = 1; HashFile hashobj(7, 2); return 0; }
Code:#ifndef FUNC_H #define FUNC_H #include <fstream> //using namespace std; struct DataRec { int id; char name[20]; }; class HashFile { public: HashFile(int, int); int h(int); int h2(int); int store(const DataRec&); int retrieve(DataRec&); private: int tableSize; int bucketSize; int * tableAssist; }; #endif



LinkBack URL
About LinkBacks



