一.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: 指定访问权限。
值 |
描述 |
0 |
查询文件的属性,并不需要访问这个文件(如果大文件,load进来会很慢) |
GENERIC_READ |
指定读权限,可以和GENERIC_WRITE组合成读写权限。 |
GENERIC_WRITE |
指定写权限,可以和GENERIC_READ组合成读写权限。 |
dwShareMode: 指定共享模式。
值 |
描述 |
0 |
不共享 |
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;