找回密码
 注册
查看: 4823|回复: 0

[收藏]文件操作 API 函数介绍

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍
( k% M( O7 _; y5 G9 A! Q+ [
8 c0 m) c8 n0 S4 b  ~- F% g
% x- i+ ?# m5 ?  w6 E4 }4 b* j作者:zhanglc
4 s2 P* ~: N. L3 Q1 H! ]
& f! S" t- u0 _% S8 B
) P: o+ E; s9 F" K    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
* ]+ B! l. \0 O6 O6 ~& ]1 i# ]8 P0 S
! d( b6 o7 P. z% s5 v 一般文件操作 API) V/ Q6 k& L4 @8 O$ Y
6 \1 K+ e* q3 z
CreateFile
+ V/ u$ q' w& q/ n5 l- n5 J& E8 N& l打开文件6 m: |4 H+ ?( n& T
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
, M& ~6 g0 o# k) |/ `% m0 e5 ?) l" T; ]9 H. Q8 Q
ReadFile) @, y, v$ m+ Q/ d2 a2 X0 t- o1 g: F- k/ s
从文件中读取字节信息。 $ U8 E, [- x. @$ {: J
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
( B9 Y# _* u% ~# \2 f& M, g& I$ f% z: J( j8 }
WriteFile
) B( b7 R7 q; O  D& [5 N向文件写入字节信息。
6 f8 W0 x; E, A同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
1 j. Q% m: P& F7 G0 ~) `/ E. O# d9 H9 G  O- ^5 E
CloseHandle
1 ~( r/ I) I" ]( I0 ]" X& \; g关闭文件句柄。
- z* K) d) d- T8 j1 M$ V% y$ v打开门之后,自然要记得关上。# {, D5 B' V/ h. [- U8 H
  d' q4 |1 ], u) s! i' F/ F8 k
GetFileTime * F) H3 t- ~& L
获取文件时间。 6 ?. }$ Z+ {: ^$ F) o; V8 a' w
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 # a. B8 h; z+ Y3 _( m
该函数同样需要文件句柄作为入口参数。. E, K' `3 |* g+ I" z

, T& n- C, G* m6 M$ w0 ~GetFileSize + P7 Q' R/ l& @" U( l% g9 }
获取文件大小。 . s, L! \4 L5 I7 I5 S. J$ x5 G
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
3 [9 X2 ~, p: H. e* F, {该函数同样需要文件句柄作为入口参数。
( O7 Q. ^, W$ v0 v( Y* N
3 D3 u  M6 G+ S4 q# s- b6 S6 nGetFileAttributes 0 T+ Z6 a& s5 u4 _% x- u
获取文件属性。
: G) z. S/ F" {+ H可以获取文件的存档、只读、系统、隐藏等属性。 2 L& R$ N4 V, V4 m7 L0 c5 J
该函数只需一个文件路径作为参数。, H( d; c% q  J4 b5 x, X
: t1 n+ w  @( `& B1 u
SetFileAttributes $ c  N, j3 k3 t2 R% v7 I
设置文件属性。 ; o3 l; B6 M( @' }# u) S
能获取,自然也应该能设置。 6 v2 L( j  a  K% G& R4 h
可以设置文件的存档、只读、系统、隐藏等属性。 : G' N6 O# f: Z
该函数只需一个文件路径作为参数。
; [& D/ f+ N& m( I" ^, G. k8 d6 o$ n4 I: Y/ |; i' Y
GetFileInformationByHandle
( [* ?( A0 ]7 [* J8 i/ K2 \获取所有文件信息
3 H+ r! F+ V) }. w该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
7 o6 k8 h7 g/ P% e+ h该函数需要文件句柄作为入口参数。' Q* Q% d: u( j8 O4 E3 P

; n9 L2 t/ {, P; k% f9 RGetFullPathName
$ \; q- o: Y/ G6 _) ^获取文件路径,该函数获取文件的完整路径名。
1 ~) v& O' m0 P! P% F% \$ W需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。) _: g" @& G+ ]% |& ]+ \3 i

0 Y; Y& g/ o. D  o; K( d3 G( uCopyFile
: l% i- F4 Q1 x. g4 S; |复制文件
/ ~' K, }/ `' b/ q; @+ T注意:只能复制文件,而不能复制目录5 u3 w/ Z( b1 G+ I2 X

, w7 @7 `4 M, g  LMoveFileEx
( m8 U; j5 ^! u1 M移动文件
5 ~+ ~6 P5 |( H. ^" b3 Q- t' s1 c既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)6 b7 K5 ?3 z$ w& Z
) \% G0 K! t: P. N: Q+ @
DeleteFile
7 k: J/ K# Z# I3 [. T/ b1 }7 g' D删除文件) \( z  \7 K7 X  {' d% n

: K) j8 p  B  k, X) FGetTempPath 1 E9 b: c2 V' ]; }6 i1 |
获取Windows临时目录路径
0 u1 x# k5 L# |! i1 l  v0 V# X+ e4 Y" s0 e- {
GetTempFileName
2 z& v  r/ {& d( M* J  c7 U' ~在Windows临时目录路径下创建一个唯一的临时文件
7 o( a' Q; K& Q2 K" l% _% q) G6 R5 F5 `: v
SetFilePoint 4 }) U- M* ?& I5 y
移动文件指针。 2 U% o, L* J3 K) z- T2 `2 q
该函数用于对文件进行高级读写操作时。0 I: D3 l. P1 @+ m, T! Q+ L4 V
6 g7 D- o0 L9 ^2 X
( g  R5 K- X8 r7 k5 V, |: w
文件的锁定和解锁! [  |0 H& q- z4 f+ u
1 s* F: f; U; s6 c. T
LockFile
/ c# U7 C9 F- m7 bUnlockFile + @, Q7 ?/ Y' I- s
LockFileEx ( o; f1 o# F% a
UnlockFileEx
5 o# j/ P$ k) f$ r& X" A
  C+ v2 \$ @( U0 ^! A以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。- }9 w: @4 E3 Q
+ T- C1 H* I) w3 W
文件的压缩和解压缩
: ^# X9 M  k! E/ F' x
  G' H+ \' E, L1 I" j" T' @LZOpenFile + _% \( G, M6 l8 r- ~
打开压缩文件以读取& e$ c. n3 S/ C* z, Q3 V
8 c( ^" ^4 O: H/ Y: I
LZSeek ! ^4 {$ L! y; ~5 c0 w1 ]) d1 W$ c
查找压缩文件中的一个位置" Z  F6 [( ~0 E# F  @! X  a! ~) s

6 U+ z  u7 j* L3 T2 iLZRead
. @" `/ ]& c$ t0 e" b读一个压缩文件
5 l% V5 ~3 j, `0 L7 K4 r5 p% m& F! n  n
LZClose ) N9 F/ D2 }3 D/ y
关闭一个压缩文件& A  _' N' [. A! E/ B5 E' X
0 h7 V1 F# t% I% a3 M
LZCopy
( y5 H5 c% s1 q4 l复制压缩文件并在处理过程中展开+ e+ u8 T; _# _. W1 ]0 u

* S% Z/ H; G: M# t9 PGetExpandedName - l9 X' \3 {! o3 t
从压缩文件中返回文件名称。5 G6 V* R6 i8 P' k$ A. J

( j. Z. O& o0 V) c5 H以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。; E/ |6 s* F# a7 C2 o  X% D
; n4 `/ t; p1 o: M/ b4 E
7 [( M9 f" ]' e/ z. s2 V+ d
文件内核对象
, J# R1 x) t: K# {, ~9 q) L' M; t. w) Z6 |" d1 t4 O: z
    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。: g# t* g: k3 q0 Z* R

- C8 D0 @9 A3 A  f9 ]" RCreateFileMapping
: t, F# X- b7 f4 F, b7 J9 o$ g创建和命名映射' o, L4 E3 Z' e# X! {) L
0 R7 p- H' ?$ t* k
MapViewOfFile
' t4 p6 @) ?9 S把文件映射装载如内存
4 c3 ?8 C3 M5 n2 ^! c* x( t2 F6 g
UnmapViewOfFile
" z, H' y9 h9 z# A' w. g8 Q: `0 O释放视图并把变化写回文件) {5 T2 Y1 ?7 P/ P9 u/ \
2 ?) O5 c0 Y  G5 T; r; ^$ S' E/ A
FlushViewOfFile * f; c$ q' c) ^- s" q( q8 y% Q
将视图的变化刷新写入磁盘
8 o  N- o/ H9 K( m" E, o8 D1 n+ x3 M  f+ X
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-10-2 00:13 , Processed in 0.016296 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表