|
|
文件操作 API 函数介绍; t2 y! F4 K* k0 @
! n0 A: K' u0 z& R5 j/ E5 C" A o5 l5 G/ M
作者:zhanglc" G& R. i) i: P. h7 D* z* {# R
0 ]4 a% \: Y' X' n, w
; q- ?2 E' N5 N6 p" v
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
@5 B. v* f4 u; _3 O$ ~
: a5 A) s9 B; ^. l 一般文件操作 API, `' }. C# |. V R
! S3 }! d; E: {) C: Q. C% x hCreateFile
2 e7 n# F8 }5 h/ i6 W# v打开文件5 c9 b/ K( ` Y3 u$ x+ S" T
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
- v, i, K" }. Q) `9 N4 B- [2 C. Q8 z3 u; a. L" A6 A0 ?
ReadFile8 R# H. R( f% ~# l
从文件中读取字节信息。
' W+ j5 Z& L' J4 g, j% |* N在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
# e3 x U+ Y8 }8 M# F- Y( U- I' h' A( N
WriteFile
6 P* I% D: H5 p8 t, C向文件写入字节信息。
8 R5 ~; R3 D- S( L" ^同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
; B e; x7 M7 k3 Q, j& B) \- \) `* E/ l& M
CloseHandle 3 y+ j2 E/ O" F
关闭文件句柄。 ; `7 m: h/ b6 N9 B U9 y
打开门之后,自然要记得关上。
! ~6 [& v- t; G( S- l: W* L' R p) W' U/ J* s: k5 m
GetFileTime $ a+ L2 z" J* J# |1 `9 y
获取文件时间。
) N7 q ^5 D% E( C, J8 c/ `* D) c有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
/ q2 k9 ?. T: e1 D6 M& w1 ?- v- I该函数同样需要文件句柄作为入口参数。
/ m( b& ?, m4 e" H$ b% n5 r% K, u
2 V6 ^$ Q; h$ O; DGetFileSize
6 J! c$ |' V# F' ^: s* I获取文件大小。 * ?; D' n! n7 F' s; W; t6 d
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
% r0 q$ _2 ^0 [8 N) N9 q& q7 x该函数同样需要文件句柄作为入口参数。# R. S3 Z V5 @5 ~' i- k2 z0 m
# A3 }; G* ]5 bGetFileAttributes
( J. Y f- W1 |- v ]7 \获取文件属性。
, c1 ]# b1 q4 a+ I9 Z可以获取文件的存档、只读、系统、隐藏等属性。 " f6 v7 y2 z' V9 i7 `" x
该函数只需一个文件路径作为参数。" ~ Z# i0 P2 k: L5 E Z
: I: M) D, P# o& X) {; ASetFileAttributes " a( g8 Q, F* i* G. w
设置文件属性。
3 z+ k" k, \% g6 t& Q9 n$ B能获取,自然也应该能设置。 1 z* J. h# h, X) y$ c* |5 ]
可以设置文件的存档、只读、系统、隐藏等属性。
T1 `1 l F& W4 u该函数只需一个文件路径作为参数。
; ?) D! s! l" e# C! E A# r. K; z4 y9 z% k( A1 z: x
GetFileInformationByHandle 9 r1 t8 {# z/ r# R
获取所有文件信息 + W+ [2 W( S1 `, m( {" @
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 / Y! L( c9 D0 F( S
该函数需要文件句柄作为入口参数。
- Y- s x3 ~8 p5 M
# r3 U5 y9 ~9 X/ R) y% |- X# RGetFullPathName
$ h( c/ H3 v2 p# o4 j( D获取文件路径,该函数获取文件的完整路径名。
! Y3 c0 ^8 p/ N需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。3 \1 K6 b! v5 h) [! u, J7 v
% _" @7 c, Y7 k
CopyFile
* C5 _6 I% c" K* ]9 W4 C复制文件 7 [4 g' o# F7 s- W% n" J
注意:只能复制文件,而不能复制目录
) L% f0 K0 L; F: f$ I5 e6 Z4 G( A9 e
MoveFileEx 6 c; R! p9 O5 V, J& _+ q# T
移动文件 ' ]7 E z7 \& f# q4 |, U
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
/ L- |( H' V, _# L: L, ?" u$ ^: f( L* E& _* A; C w2 s8 B& m
DeleteFile
" O" k- P' [9 Q2 R8 u* m删除文件3 J4 M* D! O( f3 g- G5 A
, U! a5 h. l" B# K7 V2 P3 @$ fGetTempPath 3 i" W. U4 L7 p. b
获取Windows临时目录路径
U; Y( E/ Q1 r. Z! n+ W. O8 q* K5 |9 I$ s8 K4 g8 ^
GetTempFileName
2 h1 Y) e1 t+ b9 U$ s在Windows临时目录路径下创建一个唯一的临时文件
. y* c6 E8 F. l6 K/ L% f8 Z, H4 D: ^3 }$ t3 s) V$ y# a
SetFilePoint 0 Q& r8 |: q! p* ?
移动文件指针。
6 \; I0 {6 x% E该函数用于对文件进行高级读写操作时。
4 K/ h! I! u1 G" I8 K: a: y4 D7 S1 L) m' f H( ]. E( X6 V) c
- ^& \! r, d, M5 b: t5 T1 P
文件的锁定和解锁/ F+ @; q- L2 G( Y3 c! I
! l9 A. s5 E% G8 ]' }- U3 M- GLockFile # _( O. Q% Y! q; v+ _) s
UnlockFile
& a0 q- o) y1 _5 Z0 n# M. _LockFileEx ) ~, G& [$ E6 o, z3 Q1 s
UnlockFileEx
9 c5 r3 `3 b2 q" j+ z/ U, e4 U$ d5 C. s/ S( ]. G2 S
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。7 p! e) r! _- w% b2 D
: v9 ^! I2 f6 _& u& I1 j8 I
文件的压缩和解压缩, j% [) K7 _, p, k6 _1 Q t, W8 o
2 P" D( O; g, t! l7 DLZOpenFile ) c- z0 i* B1 u; z
打开压缩文件以读取; j* m _; t( i! E
/ m0 G: k# w4 H. c4 b" l. BLZSeek
8 t0 Y! G7 @% n) o# T+ \- M! Q) e1 q, L查找压缩文件中的一个位置
/ E( \2 y7 Y. f# b5 ^7 ?2 B! ^3 [0 @
LZRead
' {$ O0 z. ?4 Q# Y$ M4 p! {读一个压缩文件
4 `( g/ c: W0 N% H
1 e7 f a0 M9 v7 ~7 ALZClose $ j) _& m0 H2 x# Q7 D9 N
关闭一个压缩文件! ]* s, l7 }5 q- Z# W$ o
; [' K" t, ~1 D) kLZCopy
9 f' x i; e$ c" ?5 f9 I. y复制压缩文件并在处理过程中展开6 _1 r! S: u6 \ E+ m
# `0 p. o x W6 h$ G0 CGetExpandedName
) X; V& O/ x6 w' D6 n# M2 x" I# e: h从压缩文件中返回文件名称。% n3 h r$ x H, h8 P: S9 F
$ ]0 o! e3 z" z ]" V {) V; z9 ^4 D
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。% P0 O* X1 n* l' E: a5 a7 H# W0 R
! L, E6 B3 ]) @+ h! x
2 V' x: y$ i) y+ u% k3 Y: E" z% H 文件内核对象
0 c* U+ F, M9 ^$ u; [" b9 q2 d$ y7 y5 t4 z( L
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。% e H( U4 D4 v5 ~. o) T- _
& G5 M9 ]" P1 T- [( b. j* v
CreateFileMapping 3 L) o5 Q+ c, p1 m0 n
创建和命名映射
" u* ^2 n! N& t' m8 P/ c
% t4 n! S- [& L6 LMapViewOfFile 5 I2 I# [ u3 ^1 |# e, C
把文件映射装载如内存
. `; D/ g D5 @8 L6 p1 }: W- b2 h) C: w% \- {! L/ `
UnmapViewOfFile . {. p8 c* f8 X& u8 T
释放视图并把变化写回文件
; y! H; B- c! b6 J$ m. H* o
$ e# D. h' a* k oFlushViewOfFile ! s% d9 Q( g P) H' R
将视图的变化刷新写入磁盘' W' Y+ r/ F6 \
& w* }& K6 m/ T
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|