轉載:http://blog.csdn.net/nathannemo/archive/2010/06/21/5683657.aspx
檔案讀寫操作總結
一.C-Runtime 函數
1. _tfopen函數。
一般用于用戶端,隻能獨享打開的檔案,不能以共享的方式打開。
FILE *fopen(
const char* filename,
const char* mode
);
FILE *_wfopen(
const wchar_t* filename,
const wchar_t* mode
);
說明:
filename:指定檔案絕對路徑名。
Mode:指定通路檔案的類型
l “r” 讀檔案。如果檔案不存在或者不能隻找到,傳回NULL指針。
l “w” 寫檔案。如果檔案存在,覆寫掉所有的内容。如果不存在,建立之。
l “a” 添加資料。在檔案末尾添加新的資料,如果檔案不存在,建立之。EOF标記保持原來的位置。用MS-DOS Type指令的話,隻能顯示原來的資料,新添加的資料将不會顯示出來。
l “r+” 打開檔案,獲得讀寫權限。檔案必須存在。
l “w+” 打開檔案,獲得讀寫權限。如果檔案存在,内容清空。不存在,建立之。
l “a+” 添加資料。和”a”一樣添加資料,差別是”a+”會更新EOF标記的位置。Type指令可以顯示去全部的資料。
注:以下标記可以和上面的組合來使用~~
l t 文本模式打開檔案。
l b 二進制模式打開檔案。
l c 啟用委托模式。如果調用fflush,_flushall檔案緩存的資料直接寫入檔案。
l n 重置委托模式,即還原到”no_commit”模式。
2. _fsopen函數
可以設定共享模式,一般用于伺服器端。
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
說明:
filename:指定檔案絕對路徑名。同fopen
Mode:指定通路檔案的類型. 同fopen
Shflag:共享模式:
l _SH_COMPAT 設定相容模式(16位應用程式)
l _SH_DENYNO 可讀寫
l _SH_DENYRD 不可讀,可寫。
l _SH_DENYRW 不可讀寫。
l _SH_DENYWR 不可寫,可讀。
3. fread 函數
從檔案流中讀取資料。
size_t fread(
void* buffer,
size_t size,
size_t count,
FILE* stream
);
說明:
Buffer: 存儲資料的緩沖區。
Size: 一次讀多少個位元組。
Count: 讀取次數。
Stream: FILE 結構的指針。
注:可以用while語句進行循環讀取操作,用feof函數判斷是否到了檔案結尾,ferror函數判斷是讀取檔案錯誤。
4. fwrite函數
寫入資料到檔案流中。
size_t fwrite(
const void* buffer,
size_t size,
size_t count,
FILE* stream
);
說明:
Buffer: 即将寫入的資料。
Size: 一次寫入多少個位元組。
Count: 寫入次數。
Stream: FILE 結構的指針。
注:可以用while語句進行循環寫入操作。
5.stat函數和fstat函數
Stat獲得檔案屬性,此檔案不需要打開,fstat獲得一個打開的檔案的屬性。
int _stat(
const char *path,
struct _stat *buffer
);
說明:
path: 檔案路徑。
buffer: 獲得屬性的結構體位址。
二.Win32函數
1. CreateFile函數
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
說明:
lpFileName: 指定檔案路徑。
dwDesireAccess: 指定通路權限。
值
描述
查詢檔案的屬性,并不需要通路這個檔案(如果大檔案,load進來會很慢)
GENERIC_READ
指定讀權限,可以和GENERIC_WRITE組合成讀寫權限。
GENERIC_WRITE
指定寫權限,可以和GENERIC_READ組合成讀寫權限。
dwShareMode: 指定共享模式。
值
描述
不共享
FILE_SHARE_READ
讀共享,可以和FILE_SHARE_WRITE組合成讀寫共享.
FILE_SHARE_WRITE
寫共享,可以和FILE_SHARE_READ組合成讀寫共享。
lpSecurityAttributes: 安全模式,忽略,設定成NULL
dwCreationDesposition: 行為設定
值
描述
CREATE_NEW
建立一個新的檔案,如果檔案已經存在,建立失敗。
CREATE_ALWAYS
建立新檔案,如果檔案存在,覆寫掉老的檔案内容和屬性。
OPEN_EXISTING
打開一個檔案,如果檔案不存在,函數傳回失敗。
OPEN_ALWAYS
如果檔案存在,打開此檔案,如果檔案不存在,建立新的檔案。
TRUNCATE_EXISTING
打開一個檔案,并将檔案内容清空。并且至少指定GENERIC_WRITE 權限。如果檔案不存在,函數傳回失敗。
dwFlagsAndAttributes: 設定檔案的屬性
值
描述
FILE_ATTRIBUTE_ARCHIVE
指定檔案将被入檔,應用程式用來标記成将被備份和或者将移除的
FILE_ATTRIBUTE_COMPRESSED
指定檔案或者檔案夾為壓縮的。
FILE_ATTRIBUTE_HIDDEN
指定檔案是隐藏的
FILE_ATTRIBUTE_NORMAL
正常屬性
FILE_ATTRIBUTE_READONLY
指定檔案是隻讀的
FILE_ATTRIBUTE_SYSTEM
指定檔案是系統檔案
FILE_ATTRIBUTE_ROMMODULE
指定檔案是DLL檔案
FILE_ATTRIBUTE_TEMPORARY
不支援.
hTemplateFile: NULL
2. ReadFile函數
讀取檔案資料。
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
hFile: 檔案句柄
lpBuffer: 接受讀取資料的緩沖區
nNumberOfBytesRead: 讀取的位元組數
lpNumberOfBytesRead: 實際讀取的位元組數
lpOverLapped: NULL;
3. WriteFile 寫檔案
寫入資料到檔案中。
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
hFile: 檔案句柄
lpBuffer: 将寫入資料的緩沖區
nNumberOfBytesRead: 寫入的位元組數
lpNumberOfBytesRead: 實際寫入的位元組數
lpOverLapped: NULL;