|
文件操作 API 函数介绍, R- x( v4 `1 p. d0 _
9 v, }& e* j. {* h5 o9 Q3 J9 d5 e- C2 W6 H
作者:zhanglc: y% e0 o" R- W, _3 Z* D, S
* q$ F8 v9 h" g A& y, R' D* R: V& U5 e
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:9 l% Y6 f! X; U- y: ] ~
2 Z3 l! n- b$ Y$ k7 a$ j 一般文件操作 API
) O- s+ F5 u! E& ~$ t5 f5 I6 y3 _6 K1 ^" q
CreateFile9 [5 U. P. c% |/ ?" ?
打开文件
6 N+ K4 g7 {' ~" P1 p$ [) a要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
! b h) I" u0 p, z) i$ u
% \7 K, w. y% {; w* pReadFile
8 R# ?& w( |# L& b# s: ?从文件中读取字节信息。 % m% E5 S5 M1 h/ |
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
# n3 H6 ~* I1 k3 Q: G- r9 {, k5 Z: S2 l7 ~2 u+ H
WriteFile
: K% L! X! a- p( i# q( L向文件写入字节信息。
/ \. [' |) n. z% F' u9 @, y9 ^% X同样可以将文件句柄传给该函数,从而实现对文件数据的写入。# i4 |8 y: ]7 O9 M8 l5 m F; `8 r- F
& q7 r, X% g8 E9 O
CloseHandle
/ X& Y5 S9 U$ @6 D- G5 R; E关闭文件句柄。 $ G. f1 f" C: v
打开门之后,自然要记得关上。5 n* `6 ^( E, I
9 b; H9 j0 z7 r0 mGetFileTime # s8 G* O% I& V4 V/ s
获取文件时间。 1 }. F }. c+ y( F
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 ! ?, q* O A8 i2 [: i
该函数同样需要文件句柄作为入口参数。
3 E s* ]7 G, Q% I9 E) E, U" U3 N0 z+ I0 U* h
GetFileSize " x2 p; @6 Y: o
获取文件大小。 * w6 J7 H& Y4 `+ P# K& D( R7 G
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
/ W% F' R) d8 P7 e- d. m5 E A# N该函数同样需要文件句柄作为入口参数。* ~0 f: i' Y& m: L5 D/ s
3 W. n( h3 r) ` \1 c0 yGetFileAttributes
8 L% N- D8 t9 p9 g- J获取文件属性。 + D2 g1 B% j% w
可以获取文件的存档、只读、系统、隐藏等属性。
, @. n/ S: _: k: n$ t9 t该函数只需一个文件路径作为参数。. M" V/ w* D% _! Z+ Q* T9 L% F
g6 L- w3 K5 Y* n. Z. S
SetFileAttributes 8 S% [ o% @1 o& @' Q% t
设置文件属性。 3 e( l" ~' ^$ `- Z' C
能获取,自然也应该能设置。 6 T# f; c+ [) s6 G
可以设置文件的存档、只读、系统、隐藏等属性。 4 w3 _# S- a8 {$ ~' g" J" k& }
该函数只需一个文件路径作为参数。' {6 {4 j4 T5 M' d+ S
P7 s, u6 I1 X# R" l9 C: dGetFileInformationByHandle * v, }5 \ {7 g0 `& Y8 Z7 I
获取所有文件信息
7 b A, d0 M- \: x/ {该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
$ z* d u* F+ {" S2 t/ h j" L该函数需要文件句柄作为入口参数。
H# Q( s! S3 N4 E4 O; O( t% n- u
, j$ M, `$ W2 k- I( O4 CGetFullPathName
. [: p5 M& d1 J; @; \2 K5 |: V' ^获取文件路径,该函数获取文件的完整路径名。
' j$ S* c' ^0 F i需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
8 V8 P+ ~/ X: N/ k2 U! z) |* A( D( S( ?3 `1 E
CopyFile ) s; n9 v5 n6 o7 {1 e: q9 C2 e
复制文件
0 _& x6 e; a0 A5 S. W' b8 H注意:只能复制文件,而不能复制目录$ x% f7 E6 G- v; E# k
2 j, [: G8 U/ x% VMoveFileEx 5 T4 m7 \( y; I& w$ y4 D, O
移动文件 / q5 E% o, Y, K' @% h
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)* }+ L* v0 `$ h* X
. [; s$ ?; E7 r- j( D+ ?
DeleteFile + f% f. G6 u2 s
删除文件
! Q& k1 X- m% z* I3 Q6 M6 e' n$ v
8 ~; A- O/ y5 g9 T" z+ hGetTempPath . w. U% D, G. I1 _+ G
获取Windows临时目录路径
" r- [- @+ l6 {& g6 ]3 ]
( a( @* q: f5 |* w% ]GetTempFileName
+ R- J% Q0 O" H- E1 n0 h6 P" k" ?在Windows临时目录路径下创建一个唯一的临时文件
+ \/ \7 a' L- ^
' @* `- V0 K/ q* sSetFilePoint ) U! t" F0 P( V9 W% V
移动文件指针。 % ~/ G! n* Z& i! e1 y. z/ o
该函数用于对文件进行高级读写操作时。# A+ e7 [+ P0 \2 k8 x% q) }
! l$ p- p- h9 H+ Y5 ^4 j4 `
6 T# M! E- ^/ {# C. C+ U$ ? 文件的锁定和解锁
7 x) j+ F3 u! Q
) k* I7 b, A/ W, ~LockFile " f* K% z8 [, l% e+ g
UnlockFile : ?6 K5 D* @+ X% I* N# f3 j# M9 U" y
LockFileEx 4 r6 ~: H3 X# H3 H* ?
UnlockFileEx
: ^' _% ~% f$ u! c, Y8 a' u7 ?* l4 z( {$ T+ z9 F
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
. U8 A% d0 E- ^1 K9 e+ T1 H8 k& ]$ D* d* P7 J( a
文件的压缩和解压缩5 ]5 O T) |% ?* R. b
% i# J1 H" u! a
LZOpenFile # L4 H% r- L% _8 v7 {
打开压缩文件以读取
. p- Q, V# n' a0 e* E
6 g) s' q$ C# y: B1 ILZSeek
/ W; h8 l' K" J5 P. H t查找压缩文件中的一个位置/ s6 o7 w% \9 j6 g: m4 a# `( ]
% e) c2 E' d* V8 ^$ bLZRead
) i2 C5 ]5 L- `" n读一个压缩文件+ A) l' B+ V6 q5 A
/ M) O! t' |7 y) E
LZClose & s( f% I. Z- r5 r# T5 v
关闭一个压缩文件% |* v3 {8 W/ G. I2 Q5 Z7 N
7 k2 r' x+ M/ \' L. d3 S% K7 Y
LZCopy
D5 ~( o9 x* N- y0 g3 B复制压缩文件并在处理过程中展开4 \+ u" O. U0 s. D
' ?& u) _5 ?/ a$ ]
GetExpandedName 0 }. }7 q" R+ y9 N; c4 x5 K; @/ y
从压缩文件中返回文件名称。
% r& {: f# M0 N) Z9 B( I
% A- ?& r; w5 B, a. _% m2 x以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
# j' P. Q* L4 h# a# Y4 }8 H8 V$ k% f9 P2 u( X
+ J& J, K, E4 n) o9 X 文件内核对象4 e" @; I7 @( Y/ R4 ~; }- L
# [0 w3 N4 A X/ O8 P" w& L 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
* n) B# ]9 U! Z
' j, j# C9 i+ t% C, x9 x+ J+ K! cCreateFileMapping 4 ]# z' ~9 \ ^6 }
创建和命名映射
! z! E; X: P2 j4 h* h, t" P$ K: ~8 u) O& M- H9 ~9 d" t* T o
MapViewOfFile ]9 F% g e$ L2 N( C
把文件映射装载如内存
3 o4 V. X2 Y0 C7 C0 ^! f4 B$ n) |% b
( q. T) T' ]1 ^/ L( S& JUnmapViewOfFile
, o* t5 z& g8 o: d7 t+ `- p+ n, g' b释放视图并把变化写回文件1 [7 p3 T3 s* \0 L+ H
. }/ g$ z9 G, \4 qFlushViewOfFile 9 k% _9 `, h% k5 c" f/ i' R
将视图的变化刷新写入磁盘+ r0 k3 s5 C$ v6 f
* ~! ] }$ D" c: G; H8 p" `
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|