|
|
文件操作 API 函数介绍7 r% L! |* c0 l8 i5 d0 j% }3 F6 ?
% j: f; x# j/ n1 e% A- {
- v: e: ^2 P3 H作者:zhanglc' T. M) }3 ?4 W) f% {
2 Q$ K( B" ^% I. k3 N1 {
8 k' I3 e, ~& h% m 在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:1 ?& f& j* Q' X5 y8 ]
& [( ?4 h8 V# n f1 c8 y 一般文件操作 API/ Q" g m+ O2 c1 K2 B2 \9 b9 P4 |& ?
% K+ D }+ m, M8 x& q/ L- S6 I: c
CreateFile j# H2 J' i2 K4 q0 I+ h( o
打开文件9 e( @# s( \& Y) N1 j
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
% T+ o& G9 D$ I+ Z4 j# u, @9 x
+ b1 U7 a( m/ N5 oReadFile: u& G8 ]3 f1 T1 G0 b
从文件中读取字节信息。
/ }. U" M* f$ @/ D4 e: K4 o. [9 |在打开文件获得了文件句柄之后,则可以通过该函数读取数据。3 u! `1 D- Y: i1 y
" L" C9 E: |- t
WriteFile * r `7 h, x" E8 c2 }6 m: _
向文件写入字节信息。
' H1 m4 t! f+ S5 P2 R" o同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
; u) M, D1 p% {5 q1 }4 ?2 X% y- V$ ] S; y
CloseHandle
. E+ P8 D9 T: w/ S! f9 m关闭文件句柄。 4 B0 m+ @' v0 p$ K p) Q' q* ~
打开门之后,自然要记得关上。
" y; h8 K( v8 E. e% e1 z6 g4 D
H5 h5 m. K6 X# RGetFileTime 8 |0 D( X: U2 i6 c8 E5 U) k4 k
获取文件时间。 7 J" I. A, \- O5 Q" w3 ^" l! ?" f0 w
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
6 l* P0 x3 h9 S该函数同样需要文件句柄作为入口参数。6 E9 K! Y9 Z" {$ |
2 q4 [6 y9 A4 n8 Z$ l& ~ QGetFileSize
( B/ X% j$ {7 g' z" ~; [6 [8 W获取文件大小。 ! d( G2 V# p* I* k: G/ U; I* E$ h5 b
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 ! M& v- J$ k& ]( j7 A* y1 x2 L
该函数同样需要文件句柄作为入口参数。
( u1 G& I( M" b9 Z6 Q, |% A
' j4 u' S! c1 x& }6 X$ qGetFileAttributes 0 d2 ]" }( x l# f+ ^
获取文件属性。
: x9 s' U( s. N* Q3 l/ D9 s' ]# ^/ j可以获取文件的存档、只读、系统、隐藏等属性。 c1 @7 M6 M4 F: P8 N. n
该函数只需一个文件路径作为参数。
" ?5 c2 Q! s1 \ L R2 v+ G& b. t" D9 O! B' Z/ F# T! ]$ K9 C
SetFileAttributes
, p3 r: V/ ^ \. C/ C' z设置文件属性。
- K/ t, _8 w) x- w0 }# E; g能获取,自然也应该能设置。 # X/ ?1 a* N. v2 m
可以设置文件的存档、只读、系统、隐藏等属性。 # J2 `4 C& u/ R/ o2 D, Z
该函数只需一个文件路径作为参数。
- ]) Q/ P" Q' s* P i7 B1 a
7 x) R7 l& A- g E: b8 CGetFileInformationByHandle # r- t( a9 g) p# T; i' @5 B, j- _
获取所有文件信息 ; o: q' R V }4 Y s" c
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 : \5 D0 `$ E$ w: g
该函数需要文件句柄作为入口参数。
+ R; H" H: I9 H- ?' f
; \3 t: s5 x7 P. Q; wGetFullPathName
* G+ J( @3 i0 C N9 z" }: W获取文件路径,该函数获取文件的完整路径名。
$ ~2 {, k* _# x5 \% R需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
8 r! R. d8 k8 B; ?2 `4 u8 V# C- \1 f
CopyFile
$ G4 o' t* Z! D' O: y; f复制文件 ' N0 `5 t4 \% |. F3 L+ Q9 Z
注意:只能复制文件,而不能复制目录
* Q H9 Z( b3 Y" [. z8 g3 D) R: g- m' j% A
MoveFileEx 8 y3 v, O1 t& y6 Z
移动文件 6 f1 |3 q$ T1 w! i: b
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)4 s' w# |6 q9 z4 Y( A m1 b* Q
6 s: t+ G/ W: Q Q' @DeleteFile 4 ^" ~ |+ N0 H& F4 D3 Q$ i T5 T# u
删除文件1 o" h4 @' F B
' S6 W1 u$ h$ y4 L
GetTempPath
7 w* F5 o# E l5 `8 b& ^* a V获取Windows临时目录路径; N6 E, L7 `/ i1 m7 _, h0 t( R1 s
; ?$ I, l5 _% u5 l( `# kGetTempFileName
8 m& H4 X. X6 Y% E* R在Windows临时目录路径下创建一个唯一的临时文件
4 k4 E- Y7 W+ Z9 k( k4 v
! J( M, R# `$ `+ JSetFilePoint
9 V& c1 u4 P }& A; R( f移动文件指针。
, D& `% O6 D" b8 e d S该函数用于对文件进行高级读写操作时。, f$ ~& A% u, T
# E3 l2 w# C- K! A, y2 g0 V0 u3 r- }' U% N% u" m
文件的锁定和解锁7 P5 N2 i6 Y8 O( @
+ K" [% m9 j8 {( u1 x |2 OLockFile / o/ e; Z; { U6 M Q# a V; k2 T
UnlockFile
( Q; Y/ Y: M$ l$ Z6 \4 B& ^LockFileEx , K( x% b3 k& {$ q' p
UnlockFileEx
- r8 Q0 r! }, \0 q3 l9 }+ N" j9 g- r( [+ E& d4 \
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。' C* Z* t! h7 {$ Z
0 M0 {: `* f* _ 文件的压缩和解压缩
# b* x/ R* M+ _/ |5 `5 Z( i8 U( T' D. H. g G" R
LZOpenFile
0 q$ m) H. e' a. P6 k" d打开压缩文件以读取3 @! Z+ y; n( l' T
2 O& B0 W% U; G( `/ n( V0 TLZSeek
* F3 I% B; F9 ^0 W查找压缩文件中的一个位置
4 a, Z9 {& T2 c) v' |/ B0 [6 z2 ~( z1 @% q6 T9 p0 [% F
LZRead
^! J4 m4 e3 S* u0 R0 E/ I2 L读一个压缩文件- E: p3 ?+ d3 u6 f
& m, H. J; c! F! _1 i
LZClose
# `: W/ t# \2 x$ V7 ~关闭一个压缩文件
+ z8 m, Z# z1 ]0 e: b3 [3 H K
! {% H7 g: c9 I; P4 }( C- ?LZCopy
& a" \# b) X( d: E复制压缩文件并在处理过程中展开/ W7 M$ ~! ?% e, a6 F: i0 z B
- \0 i E. J. C) c5 Y
GetExpandedName . o: l( D5 _* W9 G; D" t0 m
从压缩文件中返回文件名称。
1 N" J4 V3 P" U" T9 [3 D$ R! s& k+ P
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。/ X) _+ q: g7 w" j
9 v/ d: n0 E4 K \( T# d+ d
. P( c1 p- q5 I* ^) O 文件内核对象
i- [% |5 D% \/ Y4 N! z. Q0 i/ h4 ^2 Z/ o) A# i
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
5 R/ v9 Z1 n2 d- _9 I; t$ V0 b/ j0 U" _- y1 y
CreateFileMapping
; s$ G. [! q8 C! s. o9 `4 ]; V创建和命名映射3 i. t7 b. N, T! |. n/ d
+ H/ W4 a5 y% e$ m" y! QMapViewOfFile
. e" g* p. f) ~, u2 b把文件映射装载如内存
/ g u! v' {) `4 Y5 B& f
+ U. i f8 o8 D0 v M9 L/ E4 q- R( jUnmapViewOfFile
' V. q; y# q$ _, l+ t释放视图并把变化写回文件$ {2 k2 [% b7 T
7 I1 ?: S* `! T$ }/ x4 j) v
FlushViewOfFile - C8 E3 U! y7 e
将视图的变化刷新写入磁盘
$ a4 N9 t9 {! j- | c. |& H7 B
, l- |7 H' x% c4 V+ K希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|