Windows API:文件操作



HANDLE CreateFile

    LPCTSTR lpFileName,

    DWORD dwDesiredAccess,

    DWORD dwShareMode,

   LPSECURITY_ATTRIBUTES lpSecurityAttributes,

    DWORD dwCreationDisposition,

    DWORD dwFlagsAndAttributes,

    HANDLE hTemplateFile

);

/*

typedef unsigned long DWORD;

 

如果执行成功 则返回文件句柄

如果执行失败 返回 INVALID_HANDLE_VALUE

 

lpFileName: 文件名 e.g."C:\\regedit.exe"

dwDesiredAccess: GENERIC_READ 允许对设备进行读访问 GENERIC_WRITE 允许对设备进行写访问

dwShareMode: 

0 不共享 

FILE_SHARE_DELITE删除访问请求则打开对象成功 

FILE_SHARE_READ 请求读访问则打开对象成功 

FILE_SHARED_WRITE 请求写访问则打开对象成功

lpSecurityAttributes: 指向一个SECURITY_ATTRIBUTES结构的指针 定义了文件的安全特性(如果操作系统支持的话)可以为NULL

dwCreationDisposition: 下述常数之一:

CREATE_NEW 创建文件 如文件存在则会出错

CREATE_ALWAYS 创建文件 会改写前一个文件

OPEN_EXISTING 文件必须已经存在 由设备提出要求

OPEN_ALWAYS 如文件不存在则创建它

TRUNCATE_EXISTING 将现有文件缩短为零长度

dwFlagsAndAttributes: 一个或多个下述常数

FILE_ATTRIBUTE_ARCHIVE 标记归档属性

FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式

FILE_ATTRIBUTE_NORMAL 默认属性

FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录

FILE_ATTRIBUTE_READONLY 文件为只读

FILE_ATTRIBUTE_SYSTEM 文件为系统文件

FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作

FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作

FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块

FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化

FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化

FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件

也可在Windows NT下组合使用下述常数标记:

SECURITY_ANONYMOUS SECURITY_IDENTIFICATION SECURITY_IMPERSONATION SECURITY_DELEGATION SECURITY_CONTEXT_TRACKING SECURITY_EFFECTIVE_ONLY

hTemplateFile: 为一个文件或设备句柄 表示按这个参数给出的句柄为模板创建文件(就是将该句柄文件拷贝到lpFileName指定的路径 然后再打开)它将指定该文件的属性扩展到新创建的文件上面 这个参数可用于将某个新文件的属性设置成与现有文件一样 并且这样会忽略dwAttrsAndFlags 通常这个参数设置为NULL 为空表示不使用模板 一般为空

疑问:第二个和第三个参数的区别?

*/

 

BOOL CopyFile(

LPCTSTR lpExistingFileName,

LPCTSTR lpNewFileName,

BOOL bFailIfExists 

);

/*

返回值BOOL true表示成功 false表示失败 会设置GetLastError

lpExistingFileName源文件名

lpNewFileName目标文件名

bFailIfExists如果设为TRUE 那么一旦目标文件已经存在 则函数调用会失败 否则目标文件被改写

*/

 

BOOL MoveFile(

LPCTSTR lpExistingFileName,

LPCTSTR lpNewFileName

);

/*

移动一个存在的文件或者目录(包括子目录)

 

成功调用 返回true

失败调用 返回false

 

lpExistingFileName一个存在的文件或者文件夹字符串指针

lpNewFileName一个还没存在的文件或者文件夹的字符串指针

*/


BOOL DeleteFile(LPCSTR lpFileName);

 

BOOL ReadFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped

);

/*

FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作

 

调用成功 返回true

调用不成功 返回为false

 

hFile: 需要读入数据的文件指针 这个指针指向的文件必须是GENERIC_READ访问属性的文件。

lpBuffer: 接收数据的缓冲区

nNumberOfBytesToRead: 指定要读取的字节数

pNumberOfBytesRead: 指向一个DWORD类型变量的指针 用来接收读取的字节 如果下一个参数为NULL 那么一定要传入这个参数

lpOverlapped: OVERLAPPED结构体指针 如果文件是以FILE_FLAG_OVERLAPPED方式打开的话 那么这个指针就不能为NULL 如果文件打开方式没有指明FILE_FLAG_OVERLAPPED 当程序调用成功时 它将实际读出文件的字节数保存到lpNumberOfBytesRead指明的地址空间

 

疑问:最后2个参数有且只有一个为NULL?

*/

 

BOOL WriteFile(

HANDLE hFile,

LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORDlpNumberOfBytesWritten,

LPOVERLAPPEDlpOverlapped

);

/*

hFile: 需要写入数据的文件指针 这个指针指向的文件必须是GENERIC_WRITE访问属性的文件

其它参数与ReadFile相同

*/


BOOL CloseHandle(HANDLE hObject);

/*

关闭一个内核对象 包括文件 文件映射 进程 线程等

 

执行成功返回true 执行失败返回false

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值