結構應該是C/C++特有的一個型態,但是他非常的好用。

如果今天我們要利用檔案模擬一個小型的資料庫就變的非常方便了。

將以下結構利用檔案模擬資料庫。

數位高手(NBP)

struct information
{
char name[30];
char add[50];
int sex;
int salary;
};
 
>Parsed in 0.241 seconds, using GeSHi 1.0.6,數位高手(NBP)


其實作法很簡單.....利用二進位檔案格式就可以輕易達成。

存檔方式:

數位高手(NBP)

information person;
ofstream wfile;
wfile.open("person.txt",ios::out|ios::binary|ios::app);
wfile.write((char *)(&person),sizeof(person));
wfile.close();
 
>Parsed in 0.274 seconds, using GeSHi 1.0.6,數位高手(NBP)


 

讀檔方式:

數位高手(NBP)

information person;
ifstream rfile;
rfile.open("person.txt",ios::binary|ios::in);
if(rfile.is_open())
{
rfile.seekg (0, ios::end);
length = rfile.tellg();
rfile.seekg (0, ios::beg);
for(i=0;i < length/sizeof(person);i++)
{
cout << person.name << person.add << person.sex << person.salary << endl;
}
rfile.close();
 
>Parsed in 0.301 seconds, using GeSHi 1.0.6,數位高手(NBP)


後記: 

數位高手(NBP)

rfile.seekg (0, ios::end);
length = rfile.tellg();
rfile.seekg (0, ios::beg);
 
>Parsed in 0.080 seconds, using GeSHi 1.0.6,數位高手(NBP)


為什麼這段要這樣寫,而不用rfile.eof()的方式來判斷呢? 其實這裡一直怪怪的,用eof判斷一直出現讀兩次的情況.....不知道哪裡出問題。所以只好採用檔案大小除以結構的大小判斷資料的數量。如果有更好的方法也請提供給我。

piratechu 發表在 痞客邦 PIXNET 留言(0) 人氣()