|
|
文件操作 API 函数介绍
: x! k; v& O. E* N
7 S( S' F; ]9 [; c/ n( b0 e6 C
& q' W5 L! r' Y/ s( {% ~9 h! Y作者:zhanglc
' Y5 s0 }! H* Y) N$ Q6 r, x" M% o1 @
1 l# Q# E9 ?5 d
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
; I' |8 K5 W9 o/ [+ c1 O8 E, F1 W. o" F* T- O
一般文件操作 API
. @; N H5 {, t' ~! D2 x, B0 B& O) v% Z( C5 Z
CreateFile% i+ m* v }) @7 i" |& Z) i. K9 d' D
打开文件
+ w- Z3 s% Q+ B' @1 d4 }- Q2 p要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
1 b4 a0 u9 z e) I# n
2 I, _2 U9 L' J% S6 a- F: g; OReadFile9 T9 a' T3 D( H: c. S1 J
从文件中读取字节信息。
8 C D0 `8 }9 h& a) b0 M8 d7 o! f在打开文件获得了文件句柄之后,则可以通过该函数读取数据。4 a. j* S; o! s5 B- u* `9 y
# s6 }7 {9 A8 W5 LWriteFile
& t* |/ _+ s( Y9 U) c& d向文件写入字节信息。
1 Z, A/ A& C) m* B A同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
/ x; a! x% Q. Q u, w- q+ A
& Z* {4 U3 Y: P( x8 c9 ^% jCloseHandle
$ D( F9 m7 s' |关闭文件句柄。 2 G: a# d m% p, r6 H" j* `: q
打开门之后,自然要记得关上。
3 G8 z W0 I) _0 C9 S5 b" X
& ^& @2 n" n! N; ~GetFileTime - b* t% \8 n0 U. |0 Z# q
获取文件时间。
6 G; H2 J) S6 x$ q; K! H6 }6 V/ T有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
: Q. F/ G& M: d/ l该函数同样需要文件句柄作为入口参数。
- _4 X/ J9 Z" f) h |/ H8 \- @
( L& B# u: _) j" e$ R" NGetFileSize 9 O) t+ i- b3 u& z& |# ^9 q% x1 ]' S
获取文件大小。 2 h& L6 R2 s! [2 T& } A
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 0 X0 j0 D" Q& g) `( F
该函数同样需要文件句柄作为入口参数。7 L* p8 F) Z! s$ H
8 H) ]# H2 D( ^* P# p
GetFileAttributes + b" v1 {$ k# g; r" W
获取文件属性。 + {7 [1 K; o9 B* N+ y6 g; x$ z/ c
可以获取文件的存档、只读、系统、隐藏等属性。 : N/ n E/ \0 V
该函数只需一个文件路径作为参数。
4 z1 j8 C& `3 l% R: D3 B, z& l& i5 P
$ l6 K3 y( p( c; y6 Q0 NSetFileAttributes : {' R$ o# [ D) P4 \0 }& x6 l: I4 B) U
设置文件属性。 0 h9 F7 P% M" b, ~
能获取,自然也应该能设置。
6 I9 c! c7 h# D6 j9 a1 U8 Q可以设置文件的存档、只读、系统、隐藏等属性。 O7 ~! P# A3 X; v
该函数只需一个文件路径作为参数。) [% c' p, x7 y: w* d* `
. L. [/ h4 ^. g! hGetFileInformationByHandle . h1 n% ^- A) n2 H/ l3 ?: I7 B
获取所有文件信息 ( o( {6 s2 A0 s# q
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
: u) `/ S2 S% U3 S$ H该函数需要文件句柄作为入口参数。
) W! a" { l: x* c& h( P7 H9 O6 K8 B, ~; F. m# C$ R
GetFullPathName
4 y4 b# Y9 E7 } v- e! W, C* L获取文件路径,该函数获取文件的完整路径名。* p! j2 p% ]/ @) `- W
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。8 r6 ^) }+ t9 }% Z6 U3 \
! j: R$ {1 P9 o g; ICopyFile
! Z$ q. k9 A, C8 V; q0 ~# Y$ ^复制文件
$ j q# g7 J; n; T* Y注意:只能复制文件,而不能复制目录6 z% {, t; x7 Y) ?2 }
2 S. W* p/ `/ C8 J$ C
MoveFileEx
) y# O& }' K! v( Z2 {移动文件
; q. I# f" X" k7 {" z6 L. p0 e4 E既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
) d" z2 q, y8 x$ M1 @- c9 T; W5 W' L1 v8 |
DeleteFile
+ i9 k# s: s* f4 ]/ ]" v9 I3 v删除文件
& Y5 C" p% o5 V
- H& Q% K$ M* o6 r! ZGetTempPath
8 k% u2 Q2 S# }! s! {获取Windows临时目录路径
; M$ Q; W) T: N
4 i- A0 g* P1 Q4 AGetTempFileName & W5 L6 `8 M2 Z$ c9 F! S4 }( u
在Windows临时目录路径下创建一个唯一的临时文件# ^$ H( M: S" T$ Z* R5 d! _8 A( Z
( z2 E L8 i- g4 B8 z. X; ?SetFilePoint
6 v% @8 I% [$ H+ g0 C移动文件指针。 : q7 Y; L1 |6 c$ g$ Z
该函数用于对文件进行高级读写操作时。
# Z+ O: k% Q- ], S6 j
9 C) P$ e1 v( N$ Q- _3 m& u8 \3 Z+ E s# P( R( l4 F. A! R7 l0 z
文件的锁定和解锁
% _6 Y- k; L0 ~. U: G. Z
% ^" G1 \5 I; ^ M) s" H0 qLockFile
: X9 W, K2 z% b7 `% [UnlockFile
8 g! a5 I8 y0 B, T& @LockFileEx
: Y/ K8 K- \6 ~3 v( b3 `* l$ W! VUnlockFileEx
4 v$ W+ }1 t c4 c9 s0 e
. O$ F( Y! f& i) k以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
. r1 r1 R7 j- z
3 V0 ]9 r7 B1 t6 G e6 u 文件的压缩和解压缩
6 y7 |" l& \1 T+ l+ R
2 ~0 i! K) c( }: Q2 I ALZOpenFile ) C# C. i/ t- Z5 N+ o: u
打开压缩文件以读取
9 F) G$ ~: `- t" U. u+ r5 V( p" P* l8 ~3 c: W' |" e* m
LZSeek
" ~9 u2 m* ^% @5 Y查找压缩文件中的一个位置 g- u* o7 ]( L5 ?: ^
& F. A+ B( j% a0 i N+ cLZRead & W4 c& o1 l+ U3 C# b7 C
读一个压缩文件
* L4 d1 m8 T4 ]; |) S* \7 m* `" u; w4 u/ M. @' E
LZClose
9 s, e3 E/ |) H$ ~关闭一个压缩文件
! s. l% k: x& ?% H5 s$ @2 I" F
% i, y9 b4 h# Y9 kLZCopy / |- ]3 v& R+ V* N6 q+ k4 ~# u ~
复制压缩文件并在处理过程中展开" s5 Y+ O F- c9 u
7 r9 g1 A: a4 W8 q+ _GetExpandedName
4 f! d$ Z( p7 C+ o. I1 ]从压缩文件中返回文件名称。6 b8 m1 H3 }8 G
9 C3 l. C( f! v* k4 I: H! K
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
3 i* N4 k( G# R! ^
( A! @& k" n+ M0 y% h7 _9 u* ~$ K/ P0 j4 H3 N) k- t& c" `% j
文件内核对象4 W' s9 ^8 _8 F! z/ q' u) {1 [
# D+ \2 R @9 ^
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
r6 K5 f, e7 E) v
/ y$ }5 {- J$ ECreateFileMapping . \- e) a2 j R+ M+ V( k* f
创建和命名映射
( Q4 h0 x# @4 g
+ R; b' @- h7 M* R/ Q1 ^MapViewOfFile
; `: l4 X5 T; t. v0 M3 L把文件映射装载如内存/ @% M1 E/ K- q. ]! O* ]
0 n2 d$ A( a* R: h7 b5 CUnmapViewOfFile ; V+ }) H/ F9 m8 `3 Q7 {
释放视图并把变化写回文件/ l; r: @$ y" H( @0 A8 D' L* P2 c
5 I& L( h j3 a. ]' \$ yFlushViewOfFile
" H% P/ D d3 W& H! G; y将视图的变化刷新写入磁盘
, l5 t8 F: _4 g! @) Q- C* q) K% I: C' c1 V* n6 J5 A+ g1 U' d
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|