|
文件操作 API 函数介绍7 g& f8 ]$ x: _6 T
o$ h! I$ n: [8 b' p
; B$ _; f5 ~+ M: Q3 E2 l作者:zhanglc0 _8 P% g& v7 m2 V
( g) `, M! Q" L! e0 T' z! C3 D) r
. @5 ?$ R M8 C
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:0 A1 T' Y4 F# T0 t. r$ m5 O
+ F, W9 ~- r1 n; p9 V" C 一般文件操作 API2 p- Y4 d+ o2 q6 n1 k6 X
; ?9 n: ?4 w& Y% zCreateFile
) N& D, P& r c+ U1 b( P8 L6 Y打开文件
% u( k% G. F1 x要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。* D3 m2 s' h3 T& O. G
U5 X, z0 i7 l2 }" P1 U. h9 @& L& `
ReadFile7 ^( y. e6 _% k. i0 B4 ^9 L9 d
从文件中读取字节信息。 # Y) Y$ Q+ B$ u; ^$ C$ { ~
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
3 M. h' n8 X9 r9 B% r
# c, r" ^' Q8 g2 cWriteFile
( p0 }$ v! W) o/ W5 b ?5 f, L向文件写入字节信息。 " g0 d2 n' {% ~8 O, f6 @$ p
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
1 z- J7 j# L* a1 M3 x8 z$ O. V5 v) W
CloseHandle
6 t( W8 Q& U9 j- R9 u关闭文件句柄。
* n R" ~0 b& S1 P# Y3 J: }打开门之后,自然要记得关上。$ z6 D4 D4 \- x4 `
- D4 [2 [! ]: }6 o, ~) u4 r4 a
GetFileTime
. H9 Z3 d- L# v/ Y' m获取文件时间。
: Y" Z1 h! {5 ^有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 4 z7 y# h+ S* @0 V/ ~/ I& p7 r
该函数同样需要文件句柄作为入口参数。+ ` h5 {8 k, T" c
' M$ z" w4 z& z4 O# _/ l
GetFileSize
$ i: Z5 d$ \5 y% n/ s9 d获取文件大小。 $ t; K. R$ H0 N
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
) V" H1 U. Y/ O3 M# ]6 P( A! u该函数同样需要文件句柄作为入口参数。- T" a2 B2 O9 Z* D
) Y) U4 C# h' P' C4 P* x2 M- h; \& ?GetFileAttributes
' C- f! @+ V5 B L) V' [7 d获取文件属性。 % A; w. N7 Z# t# d {4 t( _: {; G
可以获取文件的存档、只读、系统、隐藏等属性。 " V ~) u/ Y9 {4 U, [7 O, H0 T0 \$ b
该函数只需一个文件路径作为参数。
& U; |. w' N! F9 ^/ S& h
7 r& J Z* Q* D: |SetFileAttributes 5 [: ~, c/ s. y6 e, G" o8 x
设置文件属性。
- m! V6 \$ C; ?0 }* s能获取,自然也应该能设置。
3 ]+ u1 z+ v' E% d8 _4 T; I可以设置文件的存档、只读、系统、隐藏等属性。
% z0 S& d+ [# m2 {! k3 q该函数只需一个文件路径作为参数。
1 M/ ` k1 I8 B1 @4 \6 C
! g6 w( c/ Q0 ?0 z4 ?GetFileInformationByHandle
5 |$ Y. Y0 h5 V$ K1 ^获取所有文件信息
0 f+ ^4 Q9 c0 g! ^9 q6 O1 W该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 & V# v) v8 I2 d& ~
该函数需要文件句柄作为入口参数。
, B+ z+ ~( e- _7 a+ P! @5 R" \- G) o4 d8 d# v# }. ~: s2 i" d$ x# w
GetFullPathName 7 A% ?' B. X# L% u
获取文件路径,该函数获取文件的完整路径名。$ `2 [) e! B' @/ k# Z* X
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。+ {& W6 P0 j9 |8 S% e9 U& ~! O) X
& G% P0 @, y1 r4 X2 nCopyFile
6 C1 M. e% w& C) o t复制文件
4 {9 R. F) h4 ]" }5 y) T% ~注意:只能复制文件,而不能复制目录
0 k* s' x$ s' w/ J1 s* ~
+ Z$ l- x# j6 B+ k5 }MoveFileEx * M4 f1 t$ I$ `8 M3 t1 g7 h
移动文件 % u- p7 z2 Z7 |" k! q% _
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作), a, z# v6 V4 J* I/ s9 m6 I
6 i9 s" X5 A7 }% ]
DeleteFile 2 c6 m7 K1 x, K* u
删除文件
1 [9 G/ w. h8 V" w( ~* I3 a) Z
) n; ]. T7 D- i# F4 uGetTempPath
: u3 w0 \- G9 |# q5 T! Z获取Windows临时目录路径9 n8 ~' I6 H% C
& Q, i; y, F% v& j7 _: ZGetTempFileName
# l1 z2 G) s/ E: y在Windows临时目录路径下创建一个唯一的临时文件
$ t w1 t. P7 m+ V- x- a4 u
! q- ~ |7 u$ s* h2 kSetFilePoint 2 s, h2 i5 L4 E6 }$ A9 D% ]
移动文件指针。 7 K* W) b+ N2 P! X
该函数用于对文件进行高级读写操作时。! \3 P5 E0 |: \# v5 g, `7 {7 j2 n
5 u0 [9 @+ q$ Q0 b( Q: j- c* M$ ~5 V3 r4 k! j, L5 ?" ]" l
文件的锁定和解锁
; @0 M b W' R& N" G% S7 k7 H+ T
LockFile
( ?6 D5 o7 _, YUnlockFile
& S2 M' P: ~/ y4 n; Q7 {LockFileEx / \; W1 y% }) L! E
UnlockFileEx
2 l1 ~5 x* f% x' s! s+ t$ r; M; g2 S; D+ V
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
' i% q+ T1 \4 Z. u- u( b. x# y. Y0 s6 e- ^% a" a4 u
文件的压缩和解压缩
- E) ]$ `; k. ~ V: W6 i7 g
: n0 N$ i* y2 f! r: G, qLZOpenFile . s' S+ g& {2 [: E f* a, b. i
打开压缩文件以读取* i C- Q! M8 M8 H5 V5 ]$ R
3 _7 _/ b0 i7 z0 N" dLZSeek
' H' S' X4 h% e4 }' u% c查找压缩文件中的一个位置
|) l/ S. Q& Z
: [9 {' o( m' M, YLZRead
1 ]& ^& T6 j1 |$ U8 X0 `0 v# h读一个压缩文件 Y) s6 o$ R" K% T/ Z- D1 u" l0 {
6 [+ ~" X i* K6 k% n0 k0 hLZClose
8 y. [2 E6 L2 k2 Q5 i0 S5 s2 L关闭一个压缩文件
/ r9 E5 E8 u9 N6 i
% D. r4 `1 F6 P8 B! `: @$ i$ A: N( WLZCopy & t2 H; V: K* x& o7 \5 t
复制压缩文件并在处理过程中展开
1 a$ v) o9 _2 |) j
( [- I( S8 G! ~GetExpandedName
) i. v' @6 p `; s8 @, \, e从压缩文件中返回文件名称。5 q- r* _: _0 s% r% a
$ {- h) a ^$ x( W1 Q5 m! C以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
' ?4 z& P7 I( |5 v
# G4 B! s/ \3 b- z* o9 c0 e+ L# P
: U3 Y$ G; Q4 r 文件内核对象; F1 B3 Y8 F* \6 C
6 x% U7 T( W, V% W# I 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
8 a% y- s) ?' m( m
" D# z5 E( r$ ]CreateFileMapping : R; J7 v0 r3 x& s
创建和命名映射
/ W H% ?- _3 M4 u% j7 e( v9 X8 d& ]/ c; s I/ }+ F
MapViewOfFile
) e, l: v) x- K7 [7 c6 ^把文件映射装载如内存
. y8 j( |4 Y! w" \' Z$ }/ t/ A- y- N5 Y
UnmapViewOfFile " s" m2 {" U7 S
释放视图并把变化写回文件
- ~! \9 L) I" W. C! q, q' ^+ v* e
( R1 p) y! ?1 j% F2 G% S* O* T+ AFlushViewOfFile
" h! Q+ G1 T6 `( e将视图的变化刷新写入磁盘' F& M/ ?3 I0 F) x8 g! l
# \" _# m8 Z" b
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|