|
|
文件操作 API 函数介绍9 ]$ Y6 @# |% S5 l6 I* A
9 c. [( o$ ]" {: W0 x- N x
7 G2 k1 }- x* B, J9 W( b( h作者:zhanglc: l5 q9 C7 {8 R: ^/ M
2 v C0 J4 X, q1 K
, H4 r# I+ u7 Z- D
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:! x b0 P6 K: h
2 M I* F; p# Z& c, R" [4 Z 一般文件操作 API
: b8 k% j% u! g% ?% e( D8 J" i( Z% H0 Q
CreateFile
* _5 C$ _) S8 A0 [- @: O& e打开文件7 D( W' r5 O* a9 ]9 ]: F* h
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
3 U5 {% f! r+ y8 E1 ~. v( R2 N' g4 K8 O, J' `
ReadFile; S5 G5 p0 P$ A% n7 M3 R( z3 V$ S5 A5 B
从文件中读取字节信息。 7 {, ] d2 M# x7 x# _# j
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
# _! G2 p; z: T5 r
+ J- K5 F& Z4 r7 e" zWriteFile / F' ~3 \1 C9 p
向文件写入字节信息。 % u7 k0 E. ~: a4 K2 I) |6 V* ?# R
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
/ p" O/ ~2 V4 N3 a# l& q
: }& ]& K- V& R1 t0 a' D( N$ M$ aCloseHandle : m) K8 X% n. k; l
关闭文件句柄。 5 q1 S, t6 H4 i X: E+ F
打开门之后,自然要记得关上。; x: k+ P: r8 R
# W. L7 S& k( [# D8 h3 |7 m
GetFileTime
0 t# W8 l* l/ h获取文件时间。
& U7 u4 w) o7 ^; `. w+ ]6 ^. s有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
. H# h& S- L U1 [0 W; [该函数同样需要文件句柄作为入口参数。
" q1 q- `& n8 b- |( W' B) L0 ~) j' T- r$ E6 z r9 F
GetFileSize 5 U7 C6 ~- M+ Q
获取文件大小。 1 d% }9 o( {2 W$ i) v$ c
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 0 c1 b' U5 ?9 T, y0 p& s, X
该函数同样需要文件句柄作为入口参数。$ {: k1 o% b2 f( F8 q+ g# D6 T
" i2 w0 J: @0 PGetFileAttributes 1 K( I2 X1 ^% t* u( n
获取文件属性。 # A2 ?& F! k& n$ _0 O) _8 }
可以获取文件的存档、只读、系统、隐藏等属性。 $ T+ j. y0 o3 X3 A$ r
该函数只需一个文件路径作为参数。
. J' y$ _6 V2 l, D& X9 k$ y0 u- _1 ]) y
SetFileAttributes , f1 Z# i n- g4 d8 @- I
设置文件属性。 9 k4 ^) `6 L1 X
能获取,自然也应该能设置。 + |/ ^4 F5 t4 r5 _# S4 f
可以设置文件的存档、只读、系统、隐藏等属性。 ' Z) ]9 A* U) T0 k5 d# |
该函数只需一个文件路径作为参数。8 b3 _. P+ M3 s
3 T$ B( R9 x: o6 @; ^) FGetFileInformationByHandle
' p! X4 u5 q( x5 Q$ q. K! ~- b获取所有文件信息
/ k: c: a Z6 i6 Z) s9 F: ?该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 8 g, p. T4 D1 H# A
该函数需要文件句柄作为入口参数。
- A ^/ Q; l: F$ l$ F
( T. S( G3 q bGetFullPathName
4 r- f' I# U" E获取文件路径,该函数获取文件的完整路径名。
5 x, C5 s# y6 W$ m' g需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
9 Q& D3 ]+ ?3 S; |
* i- p* N( \( V# i1 s* {CopyFile
$ G: Y# K6 X0 i3 f' }复制文件
$ J, k& O* K! N8 `. W注意:只能复制文件,而不能复制目录
" d. Q7 H; O$ D: @0 R1 s t
( I8 C/ w9 F) b. W( o" k3 p" PMoveFileEx
. y! n1 ?6 [' j( E. E4 N9 c$ p移动文件
' U7 M; }9 ] Q既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
% @ t1 x3 k% x* q! K) [% ?+ Z- v0 P! { R
DeleteFile
6 x9 T$ j: T- |* ~; o* R删除文件0 c+ R8 x3 g& A* R8 R1 h
+ d- }8 N! J3 d
GetTempPath 2 n8 I$ a, o: d0 L7 \, \3 n* h
获取Windows临时目录路径
: p) V+ b5 K/ z
. b' S$ U6 R% A7 R- h. c: dGetTempFileName
/ o1 W# k( v3 p1 D& d$ I' g在Windows临时目录路径下创建一个唯一的临时文件
4 J0 {4 \3 o% D4 m R+ o
4 f- f( t. u) tSetFilePoint 7 I* { E# J, `; @( b& a/ z
移动文件指针。
k1 D# y2 M; @6 d该函数用于对文件进行高级读写操作时。# i2 V- S1 n4 M+ g' ]3 x7 m( j$ {
1 p1 z$ M0 \. N4 t* P5 z3 ]( B$ Z
1 Y8 n @ X3 p1 z4 l 文件的锁定和解锁, `5 u4 D4 ?6 v* o
( ]) ?' P {) G' w# oLockFile
$ X5 d6 @/ r* u+ ~UnlockFile
0 k$ s, O$ T3 X3 { e2 LLockFileEx
8 J, ?0 m& Z8 [6 PUnlockFileEx
4 y8 i* i. Z. b/ j8 E
+ V. \9 ]- D, C; m以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。; B3 {- B. z J& ]+ O7 g) [" U
/ k2 t ]2 E1 v& [2 B2 W: d
文件的压缩和解压缩9 A0 g$ q3 _; w) e" W- l* Q- o. x
$ s5 O: u1 a1 ~9 ]LZOpenFile " F% {! k/ S3 W0 Q
打开压缩文件以读取* O7 T7 l( e+ \
. I& {& U8 O: S5 I: y3 X1 w q* F; j; @; \LZSeek
, V i3 v- Q, J8 Z% S1 ~% ^% {查找压缩文件中的一个位置! S3 R5 b, H/ H9 r1 T! z" [3 s5 T
" ?0 I9 E; |) g/ O/ \; kLZRead , L4 k Y' R3 o' e1 x* \; m
读一个压缩文件
8 Q9 E9 ~, C; l& v0 h! A) r- [- i7 B2 N; W% r% W
LZClose
8 W; P8 q8 p' d7 t6 y) J+ t( T关闭一个压缩文件' O+ C5 u0 |+ o5 i5 V' V' `2 y5 u3 s
A" |# Z9 y8 f; B" D* j$ wLZCopy " u' [) V. A1 C0 D
复制压缩文件并在处理过程中展开5 a6 t7 r9 i5 u( R" q1 w
$ Y# |) K7 V( F& i
GetExpandedName ; Q @5 K5 W" a. B* V. `
从压缩文件中返回文件名称。
8 j9 U8 S' B7 i6 F l. j( W6 P0 e- |: ^
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
$ J9 f4 ?! X7 i+ g+ J) F
. [& \ p, S+ T! A
7 Z, ^% v! C2 E$ N1 Q8 ^ 文件内核对象6 h; Q+ K) _; R: I
% ^3 H- C+ s E' S! n
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。. P: M5 O2 Q D( |' }# X- e
0 g3 v. R7 c* y& `+ [$ H
CreateFileMapping 0 b6 [- o. z4 ~3 H5 U4 B6 ~2 N
创建和命名映射
9 o* @2 z7 T, c# O8 q" ~$ @1 N, L, L8 X; n5 Q# Y {8 R
MapViewOfFile
! z( o2 U7 g* b g把文件映射装载如内存9 G/ l: a C( q3 n3 C
k4 F0 |8 c; L$ K8 O
UnmapViewOfFile + O: y% d5 a* f
释放视图并把变化写回文件7 y" e4 W0 M" k: v
* m6 e3 U0 [$ B! {
FlushViewOfFile ; o, `; e. H9 ]! f' b
将视图的变化刷新写入磁盘
: M: Q/ r8 W$ s! k- u5 W4 e6 H2 r8 \9 _7 T' j! H0 N. @
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|