api file operation

下面是 windows 中提供的对于文件进行操作的 API 函数及其功能 :

Windows API 函数   功能
CloseHandle
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与 vb close 命令相似。应尽可能的使用 close ,因为它支持 vb 的差错控制。注意这个函数使用的文件句柄与 vb 的文件编号是完全不同的
CompareFileTime
根据 FILETIME 结构的信息,对比两个文件的时间
CopyFile
复制文件。与 vb filecopy 命令相似
CreateFile
这是一个全功能的函数,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台
DeleteFile
删除指定文件
FindClose
关闭由 FindFirstFile 函数创建的一个搜索句柄
FindFirstFile
根据文件名查找文件
FindNextFile
根据调用 FindFirstFile 函数时指定的一个文件名查找下一个文件
FlushFileBuffers
针对指定的文件句柄,刷新内部文件缓冲区
GetBinaryType
判断文件是否可以执行
GetFileAttributes
判断指定文件的属性
GetFileInformationByHandle
这个函数提供了获取文件信息的一种机制 —— 在一个 BY_HANDLE_FILE_INFORMATION 结构中装载与文件有关的信息
GetFileSize
判断文件长度
GetFileTime
取得指定文件的时间信息
GetFileType
在给出文件句柄的前提下,判断文件类型
GetFileVersionInfo
从支持版本标记的一个模块里获取文件版本信息
GetFileVersionInfoSize
针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区
GetShortPathName
获取指定文件的短路径名
GetTempFileName
这个函数包含了一个临时文件的名字,它可由应用程序使用
lclose
关闭指定的文件,请参考 CloseHandle 函数,了解进一步的情况
lcreat
创建一个文件。如文件已经存在,就会将其缩短成零长度,并将其打开,以便读写
llseek
设置文件中进行读写的当前位置。该函数与 vb seek 语句类似。如果用 vb open 命令打开了一个文件,那么不要再对这个文件使用 llseek 函数
LockFile
windows 中,文件可用共享模式打开 —— 在这种情况下,多个进程可同时访问该文件。利用这个函数,要对文件进行读写的一个应用程序可将文件的某一部分锁定起来,使其不能由其他应用程序访问。这样便避免了同时读写时发生的冲突
LockFileEx
LockFile 相似,只是它提供了更多的功能
lopen
以二进制模式打开指定的文件
lread
将文件中的数据读入内存缓冲区
lwrite
将数据从内存缓冲区写入一个文件
MoveFile, MoveFileEx
移动文件。如 dwFlags 设为零,则 MoveFile 完全等价于 MoveFileEx
OpenFile
这个函数能执行大量不同的文件操作。和这个函数相比,请优先考虑 win32 CreateFile 函数(它能打开命名管道和控制 Unicode 文件名,同时不受 128 个字符的路径名称的限制)
ReadFile
从文件中读出数据。与 lread 函数相比,这个函数要明显灵活的多。该函数能够操作通信设备、管道、套接字以及邮槽
ReadFileEx
ReadFile 相似,只是它只能用于异步读操作,并包含了一个完整的回调
SearchPath
查找指定文件
SetEndOfFile
针对一个打开的文件,将当前文件位置设为文件末尾
SetFileAttributes
设置文件属性
SetFilePointer
在一个文件中设置当前的读写位置
SetFileTime
设置文件的创建、访问及上次修改时间
UnlockFile
解除对一个文件的锁定
UnlockFileEx
解除对一个文件的锁定
WriteFile
将数据写入一个文件。该函数比 lwrite 函数要灵活的多。也可将这个函数应用于对通信设备、管道、套接字以及邮槽的处理
WriteFileEx
WriteFile 类似,只是它只能用于异步写操作,并包括了一个完整的回调

  让我们通过几个例子来详细的了解一下其中主要的几个函数及其用法 :

1 CreateFile

  作用:这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备以及控制台

  声明形式:


Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long


  说明:

  此函数的返回值类型为 Long ,如执行成功,则返回文件句柄。 INVALID_HANDLE_VALUE 表示出错,会设置 GetLastError 。即使函数成功,但若文件存在,且指定了 CREATE_ALWAYS OPEN_ALWAYS GetLastError 也会设为 ERROR_ALREADY_EXISTS

  打开一个通信端口时(如 COM1 ),无论如何都要设置成 OPEN_EXISTING

  这个函数代替了 lOpen lCreate 函数,应该是我们的首选

  参数说明:


参数 类型及说明
lpFileName String
,要打开的文件的名字
dwDesiredAccess Long
,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息
dwShareMode Long
,零表示不共享; FILE_SHARE_READ / FILE_SHARE_WRITE 表示允许对文件进行共享访问
lpSecurityAttributes SECURITY_ATTRIBUTES
,指向一个 SECURITY_ATTRIBUTES 结构的指针,定义了文件的安全特性(如果操作系统支持的话)
dwCreationDisposition Long
,下述常数之一:
CREATE_NEW
创建文件;如文件存在则会出错
CREATE_ALWAYS
创建文件,会改写前一个文件
OPEN_EXISTING
文件必须已经存在。由设备提出要求
OPEN_ALWAYS
如文件不存在则创建它
TRUNCATE_EXISTING
讲现有文件缩短为零长度
dwFlagsAndAttributes Long
,一个或多个下述常数
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 Long
,如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性


  示例如下 :


long hfile= CreateFile(“c:test.txt”,GENERIC_READ,

FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,

OPEN_EXISTING,FILE_ELAG_OVERLAPPED,NULL)


   2 lcreat

  作用:创建一个文件。如文件已经存在,就会将其缩短成零长度,并将其打开,以便读写

  声明形式:


Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long


  说明:此函数的返回值类型为 Long ,如执行成功,返回打开文件的句柄。如果出错,则返回 HFILE_ERROR

  该函数会打开已由其他应用程序打开的文件,所以使用它时要小心。 win32 CreateFile 函数已取代了这个函数。这个函数与 vb open 语句作用相同

  参数说明:


参数 类型及说明
lpPathName String
,欲创建的文件的名字
iAttribute Long
,下述值之一:
  0—— 文件能够读写
  1—— 创建只读文件
  2—— 创建隐藏文件
  3—— 创建系统文件


  例如下面的语句打开 c test.txt 文件


lcreat “c:test.txt”,0

3 lopen

  作用:以二进制模式打开指定的文件

  声明形式:

Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long

  说明:此函数的返回值类型为 Long ,如执行成功,返回打开文件的句柄。 HFILE_ERROR 表示出错。会设置 GetLastError

   CreateFile 函数在 win32 下提供了更多的功能:

  参数说明:

参数 类型及说明
lpPathName String
,欲打开文件的名字
iReadWrite Long
,访问模式和共享模式常数的一个组合,如下所示:
1
、访问模式
READ
打开文件,读取其中的内容
READ_WRITE
打开文件,对其进行读写
WRITE
打开文件,在其中写入内容
2
、共享模式(参考 OpenFile 函数的标志常数表)
OF_SHARE_COMPAT
OF_SHARE_DENY_NONE OF_SHARE_DENY_READ OF_SHARE_DENY_WRITE OF_SHARE_EXCLUSIVE

   4 GetFileTime

  作用:取得指定文件的时间信息

  声明形式:

Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

  说明: Long ,非零表示成功,零表示失败。会设置 GetLastError

  如果不需要特定的信息,那么 lpCreationTime lpLastAccessTime lpLastWriteTime 都可以设置为零(用 ByVal As Long )。这个函数返回的文件时间采用 UTC 格式

  参数说明:

参数 类型及说明
hFile Long
,文件的句柄
lpCreationTime FILETIME
,用于装载文件的创建时间
lpLastAccessTime FILETIME
,用于装载文件上一次访问的时间( FAT 文件系统不支持这一特性)
lpLastWriteTime FILETIME
,用于装载文件上一次修改的时间

  示例代码如下:

函数声明

Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long

Private Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long

定义变量

Dim file As Long
Dim CreationTime As FileTime
Dim lastaccesstime As FileTime
Dim lastaccesstime As FileTime

定义结构

Private Type FileTime
  dwLowDateTime As Long
  dwHighDateTime As Long

End Type

Private Sub Form_Load()
  str1 = "c:text.txt"
  file = lopen(str1, READ_WRITE) ‘ 打开文件
  temp = GetFileTime(file, CreationTime, lastaccesstime, lastwritetime)’ 得到文件相关信息
  MsgBox CreationTime ‘ 显示信息

End Sub

  以上代码显示文件的创建时间

   5 CopyFile

  作用:复制文件。与 vb filecopy 命令相似

  声明形式:

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

  说明: Long ,非零表示成功,零表示失败。会设置 GetLastError

  参数说明:

参数 类型及说明
lpExistingFileName String
,源文件名
lpNewFileName String
,目标文件名
bFailIfExists Long
,如果设为 TRUE (非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写

  示例代码如下:

函数声明

Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Private Sub Form_Load()

  CopyFile "c:test1.txt", "c:test2.txt", 1

End Sub

以上代码将 c:test1.txt 拷贝到 c:test2.txt

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
API功能详解: 使用API函数SHFileOperation,这个函数可以同时拷贝、删除、改名或移动多个文件,甚至整个目录。如果你愿意,还可以显示相应的动画对话框,功能十分强大。SHFileOperation的参数是一个SHFILEOPSSTRUCT结构。这个结构中各成员的含义如下: - hwnd - 显示文件操作对话框的窗口句柄 - wFunc - 表示要进行的操作,可以取以下值: - FO_COPY - 拷贝文件。所要拷贝的文件由pFrom成员指定,目的地址有pTo成员指定。 - FO_DELETE - 删除pFrom指定的文件。(pTo 被忽略。) - FO_MOVE - 移动文件。所要移动的文件由pFrom成员指定,目的地址有pTo成员指定。 - FO_RENAME - 改名pFrom指定的文件。 - pFrom - 指定文件名的缓冲区的地址。必须以Chr(0)结尾。如果包括多个文件以Chr(0)分割。 - pTo - 指定目的文件名或目录的缓冲区的地址。必须以Chr(0)结尾。如果使用了FOF_MULTIDESTFILES标志,可以包括多个文件名,文件名之间以Chr(0)分割。 - fFlags - 标志: - FOF_ALLOWUNDO - 允许恢复 - FOF_FILESONLY - 如果使用了*.*,只操作文件。 - FOF_MULTIDESTFILES - pTo成员可以为多个目的文件。 - FOF_NOCONFIRMATION - 不显示确认对话框。 - FOF_NOCONFIRMMKDIR - 不确认是否建立目录。 - FOF_NOERRORUI - 如果有错误,不显示用户界面。 - FOF_RENAMEONCOLLISION - 如果目的文件已经存在,给要处理的文件一个新名字。 - FOF_SILENT - 不显示进度对话框。 - FOF_SIMPLEPROGRESS - 显示进度框,但不显示文件名。 - fAnyOperationsAborted -如果用户退出,该成员为TRUE,否则为FALSE。 - lpszProgressTitle - 进度框的标题,只有选择了FOF_SIMPLEPROGRESS标志才有效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值