|
|
文件操作 API 函数介绍
9 h, e. Z7 f; l0 b
$ T- L; @ J6 V: t) R; v5 v% V) F$ G; W" ?
作者:zhanglc
* _% a9 S% z: S
+ P2 z7 m( Z4 H/ @+ Q3 r: F4 K
. B+ {* h* Y- N2 W' {( C 在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
7 N% j- m% n; t1 W* v9 m( V) x. a' b Z/ g3 N( i n
一般文件操作 API+ |* R6 _1 U1 L
- |% L3 a) D0 s5 f' z5 g( y
CreateFile" l9 d* } L; v1 d+ d
打开文件
6 t7 i5 C$ r2 `1 s& R1 V0 ^要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。# K6 Z1 s( j2 j/ ^) ^8 J
+ w3 T) Y9 B/ XReadFile
/ H- W4 R1 Q6 ? [2 \从文件中读取字节信息。
) B9 }1 {! ~" a在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
: ]3 N# l5 d- \ K( `5 I% ~4 `
8 F2 m' l& n: j m6 T: gWriteFile ' i7 Q3 N! t7 h! I
向文件写入字节信息。
1 z; _. `2 u) _& G同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
( c( c: v I) {0 I
( r0 I- |9 f6 l, Z! Q2 sCloseHandle ( o2 Y0 {' N0 ?" N, J+ X7 B( b8 t% B
关闭文件句柄。
6 p6 r; E( [8 F6 L打开门之后,自然要记得关上。
9 x6 ~3 k8 N+ ]; a/ {, c$ {' G/ I8 ^: p! t9 O$ {9 @
GetFileTime
5 N0 b& |) ]5 j ^3 X+ @获取文件时间。 * I: y7 n" r( @) i1 v1 ?: k
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 ( Y- P" a+ `# }6 B" B
该函数同样需要文件句柄作为入口参数。
& d& r5 v+ A# }, p; H1 K) X; `5 @. K; o1 a
GetFileSize
5 h& m/ d# e. x* ?. g获取文件大小。
& ~! f0 i; G) Q( l由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
9 b% \" F: U: O. k# O3 l: B9 L) @该函数同样需要文件句柄作为入口参数。8 x l5 V$ r, N4 ?& i. m
4 V, u. M; E0 Z3 V. m' u0 j
GetFileAttributes
' _$ l+ L& F% @获取文件属性。 1 L9 v0 j; p j! h8 ?
可以获取文件的存档、只读、系统、隐藏等属性。 o7 @9 R* }6 r$ u9 K/ L
该函数只需一个文件路径作为参数。
$ d/ {, ~8 P) ?0 {1 i3 |
* M" [; H3 O! S ?( [SetFileAttributes
+ j* j q$ k+ R' E设置文件属性。 4 M0 W" d+ {0 } P5 F. m: U3 k& c
能获取,自然也应该能设置。 . ~- x, B6 r' I% h
可以设置文件的存档、只读、系统、隐藏等属性。
2 ]1 i7 ]( p e该函数只需一个文件路径作为参数。
; u; T- C& H: @" g' F! V; n/ D' W- [: V9 b/ T
GetFileInformationByHandle
' |3 B( n$ {: t; L* r5 X获取所有文件信息
) w9 Q. J+ E! ~2 U% ^该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
! E1 P9 _" X0 Z( f; V该函数需要文件句柄作为入口参数。
( K5 A4 X# ?" j/ K, {) T' I n' o7 C! R8 {0 h" o$ [$ n
GetFullPathName
2 v8 w: T; }3 O; C7 b获取文件路径,该函数获取文件的完整路径名。5 E* \* h/ n+ Y1 l& m" U3 R5 B
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
+ O% @8 [" [$ i0 n2 p! Y' e$ t3 [& J. [( m3 T6 V& ^- g( C4 A
CopyFile
; e4 J+ h6 O+ ^3 \' y复制文件
; S* Z0 D/ `% m$ K0 q7 r( Q注意:只能复制文件,而不能复制目录* D: N! H& @7 P9 `# d! L
" d, z; b; m2 Q* N! k0 X1 E# CMoveFileEx , @0 \5 V J+ u' }9 @4 q6 u
移动文件
# ^! z8 c- j/ c% i) I2 Q既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)" Z) D/ `& Q, n
7 T+ X5 i& \$ I; o7 gDeleteFile * T# X3 A+ n! c; W+ D7 z
删除文件& k* @" j9 L; l" I3 g
& Q4 m9 H3 V6 x3 L( x8 @
GetTempPath
& ~- P, P- @9 N5 E w* t获取Windows临时目录路径8 U+ R) ^7 L$ T3 c
( s; b( t$ G: N5 d: C
GetTempFileName 0 f& |9 w- h3 P- u
在Windows临时目录路径下创建一个唯一的临时文件
% E! N$ u" x8 u
/ P! b* v$ u& \6 R! mSetFilePoint
) w7 u6 o) _/ Z移动文件指针。
?* K0 K) G# r6 O9 G( s5 h3 D该函数用于对文件进行高级读写操作时。
1 k y4 e- t2 }1 D8 z- J$ c: U
C. [, a$ V8 J* [: _! K& f0 U6 I. q- T# k# i9 m k# k; U
文件的锁定和解锁
! |1 T1 v; X- h3 m, t
- ~6 I ?' l1 d3 q3 h2 RLockFile
4 [1 P, R( s" t0 P r7 lUnlockFile
$ b5 t8 `6 E+ _6 d7 v: ]LockFileEx 4 U6 g( t+ {8 H
UnlockFileEx - b% q B! N* O
1 ]4 N8 ^ s+ |7 P以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
]. a2 g( X2 S% p2 J; w
9 u6 W( n) @# l6 d' d 文件的压缩和解压缩
* e& U% u( I. A4 p5 z
! P9 E2 e9 K+ t( a1 L2 P$ P" zLZOpenFile ) h8 ^* Z# f5 v7 _2 Q
打开压缩文件以读取5 K' W4 e; M7 U1 G5 u; }
& X2 p) [) b: ~+ D k9 L" DLZSeek % N/ T F+ U" ?; H* M r
查找压缩文件中的一个位置$ B1 B+ p! C+ T" a' r0 K6 m
2 t, C0 b2 F3 i) G( ^/ \, ~3 T3 W2 YLZRead ; B4 K* e K9 u- v$ S
读一个压缩文件
+ o& L$ {' ~0 a- M8 [2 _% y$ Y! |( `4 `2 ~( G
LZClose ' y$ E1 D- t' r6 t6 W( F( N2 p
关闭一个压缩文件
5 W" c- B1 M. Q: G ?) O: `1 }/ G- _# ?; ]- Q# `* S
LZCopy $ ?: Q& Y8 s( \. B
复制压缩文件并在处理过程中展开
- O% ?. _; j! _* G5 w4 T
1 k% t, a% R8 n, A& fGetExpandedName
, T* ^4 d2 ^+ ~' ?/ G0 `从压缩文件中返回文件名称。, S) j! _# f: l3 E. `# ~9 F
2 ~2 q4 v/ f/ P9 g( S5 A( M6 O
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
: | `: k) k) D3 @- X: h& x; f
+ A! G; s1 \: g' b% K, K+ y# O: W1 f1 y, q
文件内核对象
% r6 N2 \& i# U" G6 Q
6 H1 y9 f b, s. \ L$ [7 _ 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。; k& d6 X" H+ D
) v% I% n9 F2 T: I
CreateFileMapping . \& l/ k& _: z+ c; A" E% g
创建和命名映射1 j d8 `) d8 L$ v0 i* B$ [! }3 B
! i+ A. o0 R2 B! g5 H- ^! g" L
MapViewOfFile 9 R1 J# Q( W; v ?# K# k
把文件映射装载如内存
1 n4 n- z6 S0 `9 U5 i
, E" Q, ?7 f4 L; {; P% I0 bUnmapViewOfFile
; q. S! w2 C# k2 i* R4 d释放视图并把变化写回文件9 t8 O. ~5 V# C
% x. N% p) X" z/ M4 C* J
FlushViewOfFile
/ f, i. ]0 L! d4 T将视图的变化刷新写入磁盘
4 {, N% \7 H; S& }9 f+ @! d5 i
9 `) A5 U6 @* |8 o2 ?希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|