|
文件操作 API 函数介绍$ @1 G8 T: h3 k( e. W. \8 U* l
; s2 g" ?3 c; Q0 K1 ?
8 w. e% R8 A! }1 O4 b作者:zhanglc9 P- I1 e/ v* s# ~
. S5 R$ i2 U' v ]+ u+ o' V& H3 N3 {' [; t' F& E
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
: U0 G% P! L- z- K# R+ _5 j0 [$ y W$ e- P( I
一般文件操作 API
7 Z. r/ j9 I& W; }0 {/ S) H: b5 {( d& t
- ?# ]! c& `3 Z9 `4 `; E1 E: A5 k' uCreateFile
! n& i! R' J/ O+ r; a. f8 ?打开文件
) v; n! E2 l7 i- `+ `( k( F& u要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
& y2 f \9 L! T7 Q; S, I
/ N. I" M- x3 sReadFile1 }, A0 M) g" j; |
从文件中读取字节信息。
% E, j2 I4 m# f在打开文件获得了文件句柄之后,则可以通过该函数读取数据。2 I ^7 H- ]- ?/ m4 G8 Z' O
$ D0 @1 g N( f, J$ {
WriteFile
}/ Z9 o K: _4 ~& E5 e2 d$ q向文件写入字节信息。
1 _7 }: X! `- [- L4 h) H/ X同样可以将文件句柄传给该函数,从而实现对文件数据的写入。 ?3 J" y) n# N% \1 c# ?% o
3 x( {7 }, i. N) T1 l; L4 X& bCloseHandle 5 `. \$ f& O& R+ `. j
关闭文件句柄。
2 E, O ~: L, m) v! t打开门之后,自然要记得关上。
- Y# c8 s4 v6 P& ?' [. t) V5 i# R! ^7 D6 t* h6 P" O2 Y3 _5 X
GetFileTime
+ b$ Z. f, T8 r3 G( _' ^0 }获取文件时间。 5 `( L/ C$ E# s, D! g
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
6 n* M& w( w6 @/ W0 Q* z该函数同样需要文件句柄作为入口参数。% x, t1 o. G$ M1 h3 l }4 u
) |' a! q# d7 c- _* tGetFileSize ( j$ ?, Y( [$ f3 G
获取文件大小。
2 |: T5 H& M; ?1 @- k8 \# T% b由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 ' E6 z& U+ t- Q( ?* F3 L
该函数同样需要文件句柄作为入口参数。- B3 }# |9 r9 C* g6 x
* N, r) e k7 Y2 O8 d7 l9 C
GetFileAttributes
# @2 U( t$ I. f1 Z R/ L5 w# D获取文件属性。
9 I$ u- l! g+ g可以获取文件的存档、只读、系统、隐藏等属性。
3 E! p( F, ]1 X( D$ _; z该函数只需一个文件路径作为参数。9 D7 h6 Z% p, F
4 v, v( Y: @& u' x1 J$ w6 uSetFileAttributes 1 y" K8 L4 y) W' r E* }" q7 b
设置文件属性。 x7 {) U) D) w, {' R
能获取,自然也应该能设置。
$ D% c2 x6 Z" L0 t. u8 q可以设置文件的存档、只读、系统、隐藏等属性。 1 Q6 u. M1 K' t; O# j. K
该函数只需一个文件路径作为参数。5 n: H0 v D* C6 r& m1 J7 i4 t! e# D
5 a; A D- x/ g b7 o' |* z/ iGetFileInformationByHandle ( }* K+ g6 [, U; L
获取所有文件信息 $ i9 t6 c8 V( C" {; s; x
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
% w0 Q" A2 B# J该函数需要文件句柄作为入口参数。
" M; g- \- q6 O' r2 ^! e) P2 a8 I5 z3 a1 y3 o
GetFullPathName $ n7 p- A1 O% v* u( E; g
获取文件路径,该函数获取文件的完整路径名。( z0 Y4 u+ y3 K2 t& B
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
* ?" Y4 D o8 B* }6 D- i& d# U p- _" ~+ c/ W5 S
CopyFile
' E2 s* r' j) J- `. _0 T- |复制文件
4 o. N) Z6 {( b/ i( \注意:只能复制文件,而不能复制目录% r% C, ^3 g9 r% b3 `
* ]" t. W* ?' PMoveFileEx 6 h# F0 b. d2 w
移动文件 . C6 W/ i1 |9 S# H) b( t
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)2 ?) Q& e0 a7 ^2 X. ?7 l
+ {, Z" t# v+ [# V- M( p$ v1 A; v
DeleteFile ! b1 j0 a8 e% o
删除文件
/ V' f8 c/ A% f* F/ E1 x; m3 ~- L8 x& S" b7 V- {
GetTempPath * C* G* o" Q1 D4 ?
获取Windows临时目录路径: @7 D0 d5 L. n% M$ ]. k( Z+ ?
2 I5 p8 K$ ~# L; h ?: C
GetTempFileName $ b. @5 m( {. W3 X! z
在Windows临时目录路径下创建一个唯一的临时文件) r6 I' _) p& p3 ^; s
# S, @; _- F5 S& n9 C0 r2 _SetFilePoint
2 H9 j% z O0 E移动文件指针。
, b% V5 h$ z' `; c: h该函数用于对文件进行高级读写操作时。9 C& h) z; G+ [, }3 A+ A) l
; M6 E6 C' E" \9 y! v/ b/ ?( V$ k
$ H$ ~5 ?( F3 H 文件的锁定和解锁
m7 U, {7 ^, E% Y2 `3 _) {0 m8 z1 H* q- C$ A; M
LockFile ) C7 H6 z5 g' V
UnlockFile 5 H- o! ~+ C: m: T& o }6 Y
LockFileEx
( ~+ a5 b, ^ {1 @5 u5 w( z* _4 @3 HUnlockFileEx % v; w/ r5 w2 Y( ]4 S* _
8 Z- D( Y i/ F: j( |" Y' g以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
+ y; Z* g. m! m8 V: v" `, @+ Z$ j: u9 t0 P9 p" U; ]
文件的压缩和解压缩& M) H- _; c' N3 A
0 v f P. C) JLZOpenFile / d J) h; D( F& S7 b. |, a
打开压缩文件以读取
6 o! K6 b. Q7 |3 z# y4 w- z2 r
1 x* f3 Y' L7 Z4 Y+ Z% o: e: v YLZSeek ) F' H- o$ G+ A' ` ], N; o( J% u7 ]
查找压缩文件中的一个位置' f' q1 R; i2 M8 Y, Q) D! I
" U; p7 Z% W2 B5 N1 b) t) q, ^
LZRead
6 O$ |2 G0 r& J# G1 [读一个压缩文件# s/ j6 m* m0 b! X1 _
% {: v; W a3 @+ J% L/ F/ nLZClose
4 o+ q$ n- ]1 z# i9 i( B, I关闭一个压缩文件1 V/ I1 U2 p) d6 B# r7 u# |
2 U8 u7 D; c/ _" G; V1 kLZCopy
: f- T' Y% ?& k" D- z复制压缩文件并在处理过程中展开& H2 Q( E7 E; w! O- `4 O$ `: w
6 G3 J* p9 S' u6 e+ Y% s! }
GetExpandedName / m0 _; N/ `# ^1 u/ ~ e0 n q
从压缩文件中返回文件名称。
! D; h- _, B+ y( l! i
1 f6 a' Y; k9 t) b6 C& N以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
* C4 D! U) e% F) H8 G
7 ]' z: }; {) m! b6 ~8 v1 }
4 B: O s/ P# U' R/ L! F 文件内核对象
5 C) |& n2 {; R8 h
' R, Z* l' N2 Q 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
, ]% L, E5 O) r' p) Q- j% d5 P$ g0 h$ c7 p* s# t. o
CreateFileMapping ) }7 ~ H% l; a* V ?
创建和命名映射7 T3 H1 a6 s) L' A3 f' k* _
. e7 j! o0 c3 Q" P: ^MapViewOfFile X- p- Y; T$ z w
把文件映射装载如内存
: X# ?% i7 d; B! f; M/ s: N* J0 n) I- ]+ v& ^5 M: ?. I8 l
UnmapViewOfFile
% x7 h' z/ _; C2 F% e释放视图并把变化写回文件* y5 u) m& V; r2 T( z) Y
4 D2 V1 k7 }% {) V0 v9 @FlushViewOfFile $ ? ~6 Z, j4 y5 E. ~: Q0 h' z
将视图的变化刷新写入磁盘7 }+ G" Q8 l0 H9 H- q7 y7 |
4 i* S% G. l+ v- }$ `希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|