|
|
文件操作 API 函数介绍9 |- H8 m- ?, |9 o6 o7 t- M
( Q {" S( O4 O$ ~; P% H
5 B: z9 a0 |/ t) J3 E! f
作者:zhanglc
' M- P0 z7 K0 h. _, A) M1 W& b9 \6 ~& H
V( w: i+ `1 \. X) o7 s
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:* b: R7 I m1 D8 g# Q7 F$ l
5 l$ ^/ V9 P5 m4 {0 W 一般文件操作 API5 p8 w C; h5 G$ P
+ p. M, L7 u% Y! ACreateFile
5 p; n/ b- y" _+ t/ s3 k% f打开文件
3 o2 x4 X2 o+ o% G4 v. T要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。3 [( f u+ D( [, |* ]( M" C5 i7 |7 u' d
9 L8 d1 [. E4 a3 X2 F" ]ReadFile
; i- y) L" ~3 k9 P) K6 X8 S9 t从文件中读取字节信息。 ) z7 F- J7 m% o7 e3 P( v6 ^
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。3 T/ N5 j Z, Q& Q, A7 _
9 g: h4 s% m, |3 y. M/ }6 AWriteFile & `8 D# F, e& A* \8 C) b7 z
向文件写入字节信息。 ; ?. A" |: {) t; B( F2 O7 {8 J
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。- v5 z2 |/ E5 b+ B) \
' m) }5 l( f: g+ {% i% iCloseHandle
, K ^- Y/ @/ b/ n- `. T1 Q关闭文件句柄。
. k& p5 \# j' O' N# m5 N打开门之后,自然要记得关上。
( W+ D/ n w+ j
; |' v6 B: A2 z7 F3 f+ h# l6 HGetFileTime + V$ H. x1 s, G# ?, X) [( C$ }1 M
获取文件时间。
& M- C" S! K. S+ v/ P- k有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 3 P. G) j: g/ H- \$ ^3 ]' o- q0 s
该函数同样需要文件句柄作为入口参数。1 j3 n: {, G. h% @8 W5 l
* @# x7 o/ ~3 ^. B! V. \
GetFileSize
R! L7 z6 o2 T; J' x获取文件大小。 1 h3 _$ H$ c7 U7 ~. f
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 - ^$ W7 |+ B/ s. v1 A: a" S
该函数同样需要文件句柄作为入口参数。 r1 z( K) X; v t$ g( q! x: G
" W; i( @3 c8 e
GetFileAttributes ( g( x7 l' Z+ P# j; X2 i9 X
获取文件属性。 3 u; Z7 [7 ^$ ]2 f1 e
可以获取文件的存档、只读、系统、隐藏等属性。 6 u7 ~6 D3 F* d2 r
该函数只需一个文件路径作为参数。; Z* x9 y2 p/ v8 X, v1 F. P
! P5 h- W r0 z# ]& [0 Q
SetFileAttributes . l, x+ \7 I5 L$ P; {( G% F/ z, W
设置文件属性。 % A0 h* _/ o( v6 Y( M7 ?5 S
能获取,自然也应该能设置。
8 J7 O8 T. T3 U% g6 N& b0 e可以设置文件的存档、只读、系统、隐藏等属性。
' Z" U# d/ i9 \; T2 o2 I该函数只需一个文件路径作为参数。: ~4 ~+ y+ O: R' y' I5 X1 [! U
; Z! L! f* z& Z! _! B8 U. @
GetFileInformationByHandle
3 ]$ h8 M) u3 l1 M获取所有文件信息 0 D' R1 R7 A% ?$ \- p3 t
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
0 X* H% a8 g8 o: N* E该函数需要文件句柄作为入口参数。0 n% C* _0 M( h% {# _
9 b" }1 X a" C0 H; F! hGetFullPathName 0 n8 ~2 H9 ?) r7 X9 G) `
获取文件路径,该函数获取文件的完整路径名。
" D+ h$ Q1 e; f8 J需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
/ v* z5 a7 t. o4 c! R n W& D }0 A+ k0 U2 {. A' ]3 K
CopyFile + O; b, A4 |" J
复制文件
) h# R! W) A( A2 Q& n注意:只能复制文件,而不能复制目录
+ j$ c: Q @8 q' d
: I4 U% y' X# U! O' DMoveFileEx
3 O! O2 h2 l+ m4 @移动文件
0 d. f t. N) M7 @) x: S! u既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)) b8 v& o0 p6 t8 C6 |- e2 J( Y
- n; G: ~2 e& b. n9 N
DeleteFile
' A- W1 z$ U" _# e删除文件
' W: h6 o3 p6 x3 ~
1 ]- G# ~/ i4 M! zGetTempPath
" V! m- {6 s7 B# Z1 C" j. l获取Windows临时目录路径
2 T' K/ x1 D$ ~, u
2 v/ z# E/ f: I4 y7 dGetTempFileName % z0 T5 N5 m" S i" L6 ]) {
在Windows临时目录路径下创建一个唯一的临时文件, U4 `0 p! A% T/ n* Y& l% D+ X
- ?* i9 I2 i2 m# B1 c' J7 I) h! `SetFilePoint
2 @* ^. s. G0 v# p7 l; F6 q移动文件指针。 ' A* g: c3 K2 ?( v
该函数用于对文件进行高级读写操作时。
! B$ I" ~+ I/ d% t: ~, A8 k
7 K i/ v! _ }& O. \: l9 m! }6 G5 Q6 Z- _9 a- T
文件的锁定和解锁+ T& s5 j. q0 D; u) H+ L5 U
8 Z/ a+ a# Z" ~) KLockFile
0 |6 P; Y: N1 `: O2 p. r8 TUnlockFile ' Y/ C4 |2 y; y# A' O& `' w) }
LockFileEx
6 U1 I- Y; i- M0 R4 _& R4 pUnlockFileEx 5 I8 v) P! x+ i4 q2 {" g
( @1 S- m8 R) M# ~2 K以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。# o& c* y! s& v& o
8 D% K5 J/ D* L: F1 U
文件的压缩和解压缩" z m1 P3 T: O+ E! K, K
7 `1 q) S; D& s5 _. e& o5 yLZOpenFile ) Z* a9 Q% h# @2 m) L+ i' L* w' G
打开压缩文件以读取6 W x6 q, A: k+ t
, b6 _' @; Z" G% wLZSeek 3 \( l* N. `) Z8 [
查找压缩文件中的一个位置 n( _2 n) R' V' j
8 T9 k% }0 m$ ?# \9 LLZRead , G j+ i" g* }. n6 {
读一个压缩文件
1 N* @3 J# U5 W) I: Y7 }* r
1 x& ^1 C" Y" oLZClose
/ f; Y8 @1 F' B关闭一个压缩文件
7 T' H, c2 f& K7 i
; Q8 t+ I: {; q4 _( U3 GLZCopy
' q5 i0 l" O5 P7 |复制压缩文件并在处理过程中展开1 k _; W$ v% {# S, i3 q
1 q- T$ B% p& a- c/ t c
GetExpandedName + H5 E, i6 c A) T* y1 y
从压缩文件中返回文件名称。
, b4 w' v: _' |. `+ h9 R& _" w3 v# @* D5 x: e) e
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。5 p7 C+ N4 w" d Y' R( f$ T
4 N% _, h5 a8 W" W
! w7 w5 ~* n9 {0 w- T 文件内核对象6 Q( E& d2 v& |9 `- V8 s
- d6 }0 K# m, d 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
: D1 b8 t( D; D) M3 m' q
' b0 m6 S; I2 e) r2 W6 C3 |CreateFileMapping ( `7 ]5 x' V Q2 q4 U; S
创建和命名映射
! J$ E. A. {1 I9 y& H/ y% U
( z: v# k# Y" yMapViewOfFile ( [2 D' w9 n. G' S3 N- E) G
把文件映射装载如内存8 b& K2 Z |' p( i+ Z% s: G8 ~! ?
8 W1 h" o! ^; M( C
UnmapViewOfFile
1 f% W) o9 ^8 R. `7 M# J释放视图并把变化写回文件
" _& W) R- M3 h9 Y; S ?
" Q$ Y3 l% A' c1 [; y$ k* A6 UFlushViewOfFile ' K# i+ l4 H, E4 \9 a- v
将视图的变化刷新写入磁盘, }- d K" ~! K& x
' e* O1 m3 X! A, z( `$ q希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|