天天看點

轉載:檔案讀寫操作

轉載: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;