|
文件操作 API 函数介绍
* _# e( J5 }4 W% T) U* P0 q' u; V& h3 x8 L" o4 h$ A8 g
( D- o( U a3 g, y9 Z" |
作者:zhanglc: b9 `$ I. x/ p+ O0 U7 u7 s6 i
2 |( i7 {' {- J5 I4 }$ N6 {) _! T) P* n# |/ \
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
( ]: B* r: e: K+ p
: p. n7 W! w J" @ }2 C2 p 一般文件操作 API# S0 c9 O& ^ J: _/ v* b$ q
9 X" f; E: I( }6 p) Q' q
CreateFile9 V$ b, ^+ {+ w z7 c3 y/ V
打开文件( f9 s$ ]. i, y/ T
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
8 @/ A& B) t0 B
% C u/ h. Y" F! P8 E- gReadFile. Z" S" o( f- j9 R3 B* v
从文件中读取字节信息。
1 Q2 Z; y7 n& b在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
6 S3 e1 X% j5 q2 Y- v
, m, E- O% u3 x9 \- HWriteFile
' ^4 ~* N7 d6 X8 x; I/ d向文件写入字节信息。
. y4 ?1 X% \5 b0 n* G+ v) _同样可以将文件句柄传给该函数,从而实现对文件数据的写入。5 n9 V$ [4 G* b5 e0 B& s {" B! S
8 C- E; g: E, ZCloseHandle
9 x7 y% \9 x2 \8 s5 b# x% R) x关闭文件句柄。 9 I& j2 q' q8 _
打开门之后,自然要记得关上。: G: z+ Q5 m; q' d5 C/ S ~* }
& W6 g5 v; s# N5 N" d+ G2 Z
GetFileTime
" S9 U% L0 H/ b% T+ _- g2 E7 i获取文件时间。
8 V) T2 {2 v1 R; G有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 4 s0 j; z) ?8 D: C$ y" z, Q. r
该函数同样需要文件句柄作为入口参数。6 p" ^: N4 c/ j4 e, Y
; A5 A0 F+ u/ d5 c; t9 |1 h' TGetFileSize y, S1 d$ S3 I+ \% C: C- S! M
获取文件大小。 $ M @! g, @# x6 B( D
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 ( `3 j$ V. T }5 G
该函数同样需要文件句柄作为入口参数。7 B. i) k; L8 b3 C1 [% }
/ B g: ~3 _4 g3 CGetFileAttributes % D+ `3 n( ]' }" v, u
获取文件属性。
( M) N2 P4 C7 d; k# L$ O( G可以获取文件的存档、只读、系统、隐藏等属性。
. u0 ~8 c2 W' }' o! ? [. ^该函数只需一个文件路径作为参数。- S$ n( D) z0 h. @
H% ]7 \; Q+ R; N) l8 K
SetFileAttributes : y( }6 n: Y$ k
设置文件属性。 6 @; M' h& A; Q7 }6 m
能获取,自然也应该能设置。
0 G1 |1 N+ x8 u. S可以设置文件的存档、只读、系统、隐藏等属性。
5 h; z- r* A1 V4 O该函数只需一个文件路径作为参数。; g1 m1 g Y4 M8 h( n# H
d- D* A B2 L" B2 U" N& y
GetFileInformationByHandle
/ c! Q+ G7 a6 Q0 S获取所有文件信息 $ g0 U. @ c7 i( G7 N! x% N2 Q
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
5 q" D' [, X. f3 w2 w0 c该函数需要文件句柄作为入口参数。
/ @6 v- t8 E9 D6 f: R2 Q8 ~2 N; U$ V6 r1 D0 ?( j" D
GetFullPathName
) [! S# C) `) U3 v3 Y" o5 H获取文件路径,该函数获取文件的完整路径名。% g! D e! Y7 w) y1 e
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。9 |+ M8 |& z2 o. A. K4 @+ v
5 N* A# h: k: `& F5 qCopyFile
) x) V) s" L3 f; w复制文件
+ h: U( A- u' [注意:只能复制文件,而不能复制目录 M1 s9 ^2 |+ u( K/ X
1 o7 h, L/ ?8 r8 XMoveFileEx
9 _3 Z& H: V: P" a% }移动文件 * y9 c+ @4 |* R5 M* H$ g
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
/ t% {( b+ M( B- S( o1 O
9 I* z' O- d% x6 H" RDeleteFile X; R1 G& x' I) B
删除文件
9 G" ?: q0 V! {% ]+ q/ a5 n( v* V9 }+ g% }( T! Z% Z
GetTempPath
) Q9 c) q I# [& i& {: E4 \7 Q! v获取Windows临时目录路径& V& Z I" v+ j- t
: a0 c1 d* H$ m8 |; vGetTempFileName 8 L4 G- F+ N! ~2 A
在Windows临时目录路径下创建一个唯一的临时文件4 P$ J# ?. D& Y' M+ E7 u* g) ^
# i, U. D1 i+ D2 u8 D
SetFilePoint
9 I9 t: l2 R0 p) P1 z6 q, O: D5 @移动文件指针。
8 l( m) L: ]% n2 [4 L该函数用于对文件进行高级读写操作时。( v% `2 F- T. M
, r- @% o7 a( _" F% m; x! Y6 k* }7 p: F: Z! o, }% J
文件的锁定和解锁' n2 L1 r; L7 u' F: [& {
, }7 p0 o, q# R+ i
LockFile 1 k) r: I3 d" a3 J% a5 v
UnlockFile
$ g8 o) b% E- s, S1 rLockFileEx
+ T* u6 V; p0 e oUnlockFileEx
' w% z, G' [, x: H7 X1 L# i2 h) Z: h2 ?, \
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
+ B0 o2 z* }" f2 P. ^7 E2 S7 z- m; W) e; G. d9 p' r9 L
文件的压缩和解压缩& f+ D: T" C2 @; u( G/ m( q8 E
" H5 d( w* R: V1 ^* k! `, J2 Z7 [% {
LZOpenFile
3 P, B2 w+ m9 [. `4 X" E5 j$ Y7 N打开压缩文件以读取
4 L+ h7 x8 G3 ?( ]2 t1 `" \: O8 h& O* m, i/ `2 Q5 N$ ]/ R5 q
LZSeek
/ {3 e1 {) Z4 P6 s; Q查找压缩文件中的一个位置
2 G1 N8 H( u# J8 x7 l% R- M6 C
4 ]* [3 A& k+ T+ P* o* d: TLZRead 1 G. N0 K+ T- c) n8 x4 o
读一个压缩文件* ^4 V! v0 e' @4 {9 ?$ ]6 G v5 u2 X& c
) V7 w3 L* w' G# PLZClose
" h3 F* n! X( o关闭一个压缩文件5 u7 x: ?7 o8 d
5 O# o+ T! P/ B1 `# |- e
LZCopy 5 [( r# _9 s7 u* \5 i3 R9 D+ N
复制压缩文件并在处理过程中展开- T+ C' O. L( O& O
/ |/ [9 v; N0 ^( ]- s
GetExpandedName
( N* i7 |- s2 z; e% \从压缩文件中返回文件名称。
( n- N5 k2 n* |2 o M6 a7 w# T3 ?4 x5 Q" C3 i* _. S
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
- p, g R3 q8 }9 S3 h
+ K4 U/ s- B9 }# g( x2 x @" C2 H9 H6 C- X; e0 [/ x1 V
文件内核对象
+ _3 B# a1 i1 H% c' @0 K. x* }- c7 A# I) E; B; w: E E
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。. E9 ?& [9 [* h6 h3 m; v( E# Y* \
5 L: I& h, [: e5 e; O) r
CreateFileMapping 3 Z( R; _$ w4 w" l+ s7 b
创建和命名映射 T+ v% I+ O- c0 y9 h( ~6 i6 J( d
4 B+ H/ {- b3 f& B8 M9 {7 B3 r
MapViewOfFile 2 ^4 ~* H9 Z* w+ } T$ v
把文件映射装载如内存
8 S* `" O* y9 R! U
0 x0 q5 _+ U6 d1 b1 V$ mUnmapViewOfFile
6 g& |7 R0 H: Q释放视图并把变化写回文件5 h% ^7 n( t8 m/ b. R
4 |; ?: e: D3 p' EFlushViewOfFile
( P( E6 ^$ W/ w' @1 E5 h' ?2 R将视图的变化刷新写入磁盘1 N3 g0 M3 H9 m$ ?; E7 g0 w
0 N; z0 V; M" y' b1 \* u4 {# M
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|