|
|
文件操作 API 函数介绍0 a( C; B8 u2 G: V& i) Z
+ U0 m1 t0 ~' o3 U' m( x" \7 I
, I& Q: L4 S" [9 G, x作者:zhanglc: R( s3 e( Z# ~; G6 C4 ?
1 r7 b* h: S# Z2 i8 S3 {
, W) J z3 b" q0 D0 o 在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
l Y( @7 N& U7 O2 \3 z1 Y7 E* {9 V& l1 u& j" D* ^$ e- a& G
一般文件操作 API3 z$ g$ s) f& E7 F' r( U" H
6 V5 P" ` o! t$ L$ i, ^" GCreateFile& M3 N- s' h% {# h- m7 D
打开文件# w1 Z* o: S1 A5 b
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
1 X0 c+ Z+ k5 s8 z2 A: O8 e- R- ]
# Q2 U' I% X- ^/ C, V. f& h# q: uReadFile
/ o+ c9 w3 _3 u$ t5 J- t& ~+ h从文件中读取字节信息。 9 j: g+ c1 J1 o8 y5 Y: o$ ?4 R
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
5 @. x4 B, z4 p0 C4 K2 e) H3 s1 ~, P8 n$ g' {
WriteFile % u% F! a, o, j C( a
向文件写入字节信息。
% v: `9 U3 [& v* ^同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
' ~3 n. u" V$ \9 v6 ]5 n3 P. k( \6 L5 e: |# T
CloseHandle 4 j: t2 U$ T4 \1 c& z1 U( c
关闭文件句柄。
. `. J) H: z0 e) ]) x打开门之后,自然要记得关上。
# e% x; m% c5 r5 ^, @% ^( {
9 K' w8 g- J% t4 QGetFileTime
: ~6 s7 c/ f2 s+ f2 r获取文件时间。 # V$ U! a: q( V3 k0 X$ h% |
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 # p; O% N' s/ j; j/ O! c' x
该函数同样需要文件句柄作为入口参数。( ~9 {) r- T1 S' J$ p
- K2 k& w" O9 y' ]: h oGetFileSize
$ u/ z3 c* Q1 w: F9 N) D获取文件大小。
9 m0 ]2 c8 Z$ W8 \- v3 \由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
7 [7 P- d: }$ B$ P) `. h该函数同样需要文件句柄作为入口参数。0 i8 Q6 U x( F$ {+ q5 v. t2 v/ m
1 [6 L5 p5 U) p2 |7 EGetFileAttributes
f0 I% h1 ]1 s, h7 V4 Z6 j获取文件属性。 $ X* b5 R. e4 {- {& b5 ]
可以获取文件的存档、只读、系统、隐藏等属性。
, M u* ~9 j R' O该函数只需一个文件路径作为参数。
. |4 w) l2 U9 |! c* l8 B; U% b8 o# m2 \, u& c
SetFileAttributes
! Y1 V: k e! g设置文件属性。 2 }; w, H8 O6 `) L8 u4 a: s! Z
能获取,自然也应该能设置。
f* P2 u) I* @; |! n2 t$ x2 O5 T可以设置文件的存档、只读、系统、隐藏等属性。
: X1 W" y1 \: h' J; l+ ~该函数只需一个文件路径作为参数。/ Y1 Y( [9 A2 M/ G
& n6 @- \1 R6 O
GetFileInformationByHandle
9 c$ S* o& U9 O; L$ k. s6 X3 D获取所有文件信息
" q2 o6 r- d7 S- g6 M! Q" M1 z% Z该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 8 D5 I, p3 L% i' N, Q { B" N
该函数需要文件句柄作为入口参数。
+ G& U* l7 c: H1 g' P, A: o; w* u4 s
GetFullPathName * `) h' w; W' h# {) B
获取文件路径,该函数获取文件的完整路径名。( L$ T" V' B) S x& ?3 e8 n+ g
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。5 y9 C, T8 c- u+ t! m1 b
3 r/ A+ m+ H% t) ~5 K3 e& f* O" rCopyFile 6 J* D2 d9 L4 G2 i: b# S/ M. `, w8 Z. q/ C
复制文件 8 d# w. Y' _' w* K, O6 g$ y
注意:只能复制文件,而不能复制目录
6 o' v" h6 I/ ^0 |# b9 k
: J# Q- ~' \% t% e& K. D5 ]MoveFileEx 3 }4 | H8 \7 ?, y# P3 Y: J* K
移动文件
. |4 R5 I+ U- n% O9 f既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
1 X0 u7 m! G7 G9 P I- x
; }0 e) y5 i" b3 a. sDeleteFile 6 i# R: j! r. e* I
删除文件
N$ F7 J; e; j# M6 t, t G) G# X( {' Z! }$ J4 @- a. e% |0 ` t
GetTempPath
2 d I9 }) y. B5 D, U z; g获取Windows临时目录路径
1 U9 a' p2 u+ a+ m" F# I0 M, m3 d/ l7 M7 A
GetTempFileName ; c1 J8 w6 `# l! \% f& R$ C
在Windows临时目录路径下创建一个唯一的临时文件6 f, S! |! C2 [, U, i8 {0 o7 _
1 |2 g% ~. R% U" j+ s8 f
SetFilePoint / [. E* s! q; m5 Q6 c/ A9 x9 H
移动文件指针。
: _# s7 D0 l1 p该函数用于对文件进行高级读写操作时。
9 [# X$ v& E# O/ q6 J2 j" W# w% w0 j6 s% H: e M
! q) \" ^8 s1 \! m8 D* T. U 文件的锁定和解锁2 W' X! s# \3 A( G& R1 B
" u, q: a8 I- `( J. Q# s' a% Y
LockFile e5 C+ `8 w! \; V
UnlockFile " K* s1 M& t& U0 Q) [) ^& |
LockFileEx ; G& y2 ^( J# A3 B1 v( h3 o: t0 m
UnlockFileEx ! u+ x% t5 B8 y. l: l4 o
7 y0 H0 S3 h0 W) b* b以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
) w. ?% j; W% q% q5 x; T! z* ]! W6 \ g9 ?, M$ E t+ n$ z+ A) c
文件的压缩和解压缩
/ L I* i' a* r: e& I0 H5 P, s1 }5 I5 S. R7 i
LZOpenFile
! B2 `, {6 s( [$ y' Q- _打开压缩文件以读取; G2 f+ U- s; R% a
2 o( X0 l2 p! p% ]
LZSeek
1 h) m# O+ G' b# v6 v1 J查找压缩文件中的一个位置
. j1 K" g- i7 c' l; |7 q) @, C
LZRead % {* c7 M ]8 T' \$ Y$ q- ^' t ~+ ^! E# a
读一个压缩文件% X" u4 u( w" [4 y# V0 J& W" V
6 _8 |" v: ?0 j3 w4 P6 x; J5 v
LZClose
4 o' F3 A% K; ~# I( @% C+ k关闭一个压缩文件$ d- Q8 r$ w7 y! c
\7 P5 E( Z# g% T- W# mLZCopy
3 r) G* |8 ~, G复制压缩文件并在处理过程中展开* p" \+ \/ {3 p" v5 |6 s; P* k( t) H& N
[# Q4 S4 U* p$ i
GetExpandedName 0 _9 A. a, c* G! L9 R3 |# G
从压缩文件中返回文件名称。
6 z0 M% Z: B, W0 o% F7 k, n3 v* u2 K t8 i7 D; r1 m
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。5 Y. t6 g. R+ c/ r e6 `
) [% F. d/ W, Z% A. K0 k/ O i# c$ B* w0 v4 k1 S$ J( u. w
文件内核对象
% p( p3 a, L5 J& [& ^
0 s, d/ {0 r# k) T8 ~( s3 n/ u 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。( ^+ d( A3 W$ a0 J
d7 j5 B3 E1 s' }( ?7 g z9 aCreateFileMapping
3 W( o7 O/ t+ O1 c8 ?* S创建和命名映射
+ G7 v. A3 k! e8 n# A% M$ F$ Y1 B3 R4 Q) ?+ T
MapViewOfFile G2 H9 z; ?, g8 n; P- ~
把文件映射装载如内存
0 N0 F9 s: |9 s5 ~2 W U# m$ u& U5 {0 M0 n1 ?
UnmapViewOfFile
, Z, V$ Z/ P+ g. w5 F0 M9 G4 _释放视图并把变化写回文件
: a( B5 P2 s" W( J( x8 b6 {, e( x2 G+ O' a+ D! p: s* v O
FlushViewOfFile
5 \5 h6 w5 @9 s6 H0 }% r将视图的变化刷新写入磁盘
9 |, G+ g! Y3 N' c p
& P% j: a" Z5 p希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|