?? file.c
字號:
/*############################################################################# * 文件名:file.c * 功能: 實(shí)現(xiàn)了指紋相關(guān)文件的操作 * modified by PRTsinghua@hotmail.com#############################################################################*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "file.h"/* 對象的這些接口實(shí)現(xiàn)是私有的,不必為用戶所知 */typedef struct iFvsFile_t{ FILE *pf; /* 文件指針 */} iFvsFile_t;/****************************************************************************** * 功能:創(chuàng)建一個新的文件對象,只有在創(chuàng)建之后,文件對象才能為其它函數(shù)所用。 * 參數(shù):無 * 返回:若創(chuàng)建失敗,返回NULL;否則返回新的對象句柄。******************************************************************************/FvsFile_t FileCreate(){ iFvsFile_t* p = NULL; p = (iFvsFile_t*)malloc(sizeof(iFvsFile_t)); if (p!=NULL) p->pf = NULL; return (FvsFile_t)p;}/****************************************************************************** * 功能:破壞一個已經(jīng)存在的文件對象,在毀壞之后,文件對象不能再為其它函數(shù)所用。 * 參數(shù):file 即將刪除的文件對象指針 * 返回:無返回值******************************************************************************/void FileDestroy(FvsFile_t file){ iFvsFile_t* p = NULL; if (file==NULL) return; /* 關(guān)閉文件,如果它還打開著 */ (void)FileClose(file); p = file; free(p);}/****************************************************************************** * 功能:打開一個新的文件。一個文件可以讀打開,寫打開,或者被創(chuàng)建。 * 參數(shù):file 文件對象 * name 待打開文件的名字 * flags 打開標(biāo)志 * 返回:錯誤編號******************************************************************************/FvsError_t FileOpen(FvsFile_t file, const FvsString_t name, const FvsFileOptions_t flags){ iFvsFile_t* p = (iFvsFile_t*)file; char strFlags[10]; int nflags = (int)flags; /* 關(guān)閉文件,如果已經(jīng)打開 */ (void)FileClose(p); strcpy(strFlags, ""); if ( (nflags & FvsFileRead)!=0 && (nflags & FvsFileWrite)!=0 ) strcat(strFlags, "rw"); else { if ((nflags & FvsFileRead)!=0) strcat(strFlags, "r"); if ((nflags & FvsFileWrite)!=0) strcat(strFlags, "w"); } strcat(strFlags, "b"); if ((nflags & FvsFileCreate)!=0) strcat(strFlags, "+"); p->pf = fopen(name, strFlags); if (FileIsOpen(file)==FvsTrue) return FvsOK; return FvsFailure;}/****************************************************************************** * 功能:關(guān)閉一個文件對象,文件關(guān)閉之后,文件不再可用。 * 參數(shù):file 文件對象 * 返回:錯誤編號******************************************************************************/FvsError_t FileClose(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; int nerr = -1; if (p->pf!=NULL) { nerr = fclose(p->pf); p->pf = NULL; } if (nerr==0) return FvsOK; return FvsFailure;}/****************************************************************************** * 功能:測試一個文件是否打開 * 參數(shù):file 文件對象 * 返回:文件打開,則返回true;否則返回false******************************************************************************/FvsBool_t FileIsOpen(const FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; return (p->pf!=NULL)?FvsTrue:FvsFalse;}/****************************************************************************** * 功能:測試是否到了文件結(jié)尾 * 參數(shù):file 文件對象 * 返回:到了結(jié)尾,返回true;否則返回false******************************************************************************/FvsBool_t FileIsAtEOF(const FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsFalse) return FvsFalse; return (feof(p->pf)!=0)?FvsTrue:FvsFalse;}/****************************************************************************** * 功能:提交對文件所作的更改 * 參數(shù):file 文件對象 * 返回:錯誤編號******************************************************************************/FvsError_t FileCommit(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; return (fflush(p->pf)==0)?FvsOK:FvsFailure;}/****************************************************************************** * 功能:跳到文件的開頭 * 參數(shù):file 文件對象 * 返回:錯誤編號******************************************************************************/FvsError_t FileSeekToBegin(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) { if (fseek(p->pf, 0, SEEK_SET)!=0) return FvsFailure; return FvsOK; } return FvsFailure;}/****************************************************************************** * 功能:跳到文件的結(jié)尾 * 參數(shù):file 文件對象 * 返回:錯誤編號******************************************************************************/FvsError_t FileSeekToEnd(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) { if (fseek(p->pf, 0, SEEK_END)!=0) return FvsFailure; return FvsOK; } return FvsFailure;}/****************************************************************************** * 功能:得到當(dāng)前的文件指針位置 * 參數(shù):file 文件對象 * 返回:當(dāng)前的指針位置******************************************************************************/FvsUint_t FileGetPosition(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) return (FvsUint_t)ftell(p->pf); return 0;}/****************************************************************************** * 功能:跳到文件的指定位置 * 參數(shù):file 文件對象 * position 指定的文件位置 * 返回:錯誤編號******************************************************************************/FvsError_t FileSeek(FvsFile_t file, const FvsUint_t position){ iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) { if (fseek(p->pf, (long int)position, SEEK_SET)!=0) return FvsFailure; return FvsOK; } return FvsFailure;}/****************************************************************************** * 功能:從文件中讀數(shù)據(jù),所讀取的字節(jié)數(shù)由length決定。讀取的數(shù)據(jù)保存于指針data。 * 參數(shù):file 文件對象 * data 指向存儲數(shù)據(jù)的數(shù)組 * length 要讀取的字節(jié)數(shù) * 返回:實(shí)際讀取的字節(jié)數(shù)******************************************************************************/FvsUint_t FileRead(FvsFile_t file, FvsPointer_t data, const FvsUint_t length){ iFvsFile_t* p = (iFvsFile_t*)file; return (FvsUint_t)fread(data, (size_t)1, (size_t)length, p->pf);}/****************************************************************************** * 功能:往文件中寫數(shù)據(jù),所寫的字節(jié)數(shù)由length決定。要寫入的數(shù)據(jù)保存于指針data。 * 參數(shù):file 文件對象 * data 指向存儲數(shù)據(jù)的數(shù)組 * length 要寫入的字節(jié)數(shù) * 返回:實(shí)際寫入的字節(jié)數(shù)******************************************************************************/FvsUint_t FileWrite(FvsFile_t file, const FvsPointer_t data, const FvsUint_t length){ iFvsFile_t* p = (iFvsFile_t*)file; return (FvsUint_t)fwrite(data, (size_t)1, (size_t)length, p->pf);}/****************************************************************************** * 功能:從文件中得到一個字節(jié) * 參數(shù):file 文件對象 * 返回:讀取的字節(jié)******************************************************************************/FvsByte_t FileGetByte(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; return (FvsByte_t)fgetc(p->pf);}/****************************************************************************** * 功能:從文件中讀取一個字 * 參數(shù):file 文件對象 * 返回:讀取的字******************************************************************************/FvsWord_t FileGetWord(FvsFile_t file){ iFvsFile_t* p = (iFvsFile_t*)file; FvsWord_t w = (FvsWord_t)fgetc(p->pf); return (w<<8)+fgetc(p->pf);}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -