|
文件操作 API 函数介绍. x6 m0 q# g$ ]3 |% I; H5 H
" ?, g$ Z) j, u L- g" i
+ u: s) K$ j1 t( {& v
作者:zhanglc* p; r9 V! K, j+ B% i
' x. C5 P, W. M
; ~* X* l- V1 [2 b, P0 F3 Q 在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
7 I6 w8 M1 h5 R+ l5 t6 T8 K" G5 {1 [9 ^' I0 ^ d: l
一般文件操作 API' q, j5 w$ C9 e* g* M
# ^- S# e% |0 \3 ]1 M( q5 NCreateFile; p9 l4 n; z) h6 e* ~0 n2 |
打开文件
* }, `' q) {9 ~0 E; \! \% n8 M要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。8 p4 b* | r: n2 ~
2 d' D) v9 I7 m$ u
ReadFile
5 {; q, ?' C% c/ U8 h从文件中读取字节信息。 8 E6 `9 Z( e' w4 }' Q1 D* o
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
7 ~* n2 ]6 w. ~2 E2 f2 d0 a9 y8 I2 a. [7 [0 i5 ^6 Z$ h! y
WriteFile
; V2 }0 [6 m h J向文件写入字节信息。 0 l% m8 w& l5 W k2 ?- k/ X
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。' r5 C [. r- j; z4 D* b
, ^+ E' N3 d7 t$ j7 i2 u0 [CloseHandle
. }( s# R, M$ T% P关闭文件句柄。
8 Y) I# W4 Q+ U' s: Q$ i1 s6 I9 ]打开门之后,自然要记得关上。4 X5 w0 Y/ x1 f' n5 b2 J
* W9 Q+ M3 H: L1 l m* nGetFileTime
. A& t' u; j& M' J. A& r获取文件时间。
! F7 y; a0 F- P4 V有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
2 |' A" ~0 P1 H; a% N* b4 p该函数同样需要文件句柄作为入口参数。6 s! p" L9 y) M9 _0 g
5 O% {% A! j6 d+ M4 Z6 BGetFileSize 4 J/ r3 ~0 Y. R. I- j1 x
获取文件大小。 , B9 Y, \- W: F1 n V" j
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
4 R' a3 c. Q8 R/ v3 o9 h该函数同样需要文件句柄作为入口参数。
9 |- W1 d6 y- a' [, G/ | j1 X% V6 J- I2 k3 Q* x
GetFileAttributes
{( H' I- o4 K9 C8 y获取文件属性。
/ E- @, z4 U( j9 o6 j* t8 I可以获取文件的存档、只读、系统、隐藏等属性。 : w* E& j3 _- J9 D' l1 e
该函数只需一个文件路径作为参数。
A" J7 }" Z# r; E `7 Q
2 m8 g% X& ^+ R) [) ]& J' RSetFileAttributes
2 W* x: @ t' r& g/ F. i. ~设置文件属性。 6 [# i5 ^9 w9 N% b7 Q
能获取,自然也应该能设置。
; p- _& t5 Z- S; E. {5 U! R可以设置文件的存档、只读、系统、隐藏等属性。
, P* G8 x% y* A( v& `) e) g该函数只需一个文件路径作为参数。
/ B: d* A: |: Z6 E1 O8 M
9 i+ Y. H0 D& O8 f3 _GetFileInformationByHandle
& N& F2 y) l( |6 M8 l0 d$ x+ e( [获取所有文件信息 9 Y8 I* r' S% c1 V
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 G' M/ @) O5 i6 k# C7 H0 C
该函数需要文件句柄作为入口参数。
8 I8 y4 f! x' t! L( u) `$ f, V4 e5 U; }
GetFullPathName - O( t7 x2 `* Q- t
获取文件路径,该函数获取文件的完整路径名。
2 J2 J& O, |' a, y& B需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
$ e7 i$ D8 B) j; I! L/ O4 z# f( T8 b, z
CopyFile ( q8 y9 {3 l2 C) _
复制文件
- E. n1 n" z: t% h注意:只能复制文件,而不能复制目录
% M: @" I; }. S5 {6 w# S3 E; P4 y2 e2 R8 L9 ?5 y( W
MoveFileEx 0 z, G& A( q1 M- t
移动文件 & ~6 N t5 n/ Y& z+ B2 u
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
( \6 o8 _4 f0 X% x8 \# s
8 o* s b X0 u, K1 n* d0 i' wDeleteFile
- j8 z* B* U1 X4 S# t删除文件
% j, y& M; d) z+ h7 F
8 b8 P n+ W: z: f6 L: }GetTempPath
; m3 |# O: A! Y( a: F获取Windows临时目录路径
& q( f5 _2 }$ C4 |2 l8 i" y& s5 I, t& t, v" R3 e$ q1 }
GetTempFileName % Y' s8 x* N% L1 ^# K) x
在Windows临时目录路径下创建一个唯一的临时文件2 c0 e! `" q; I, `. v3 w
% V R8 W7 r7 D$ h+ N8 OSetFilePoint % Q2 }1 I8 g% B# A0 S. \( A
移动文件指针。 ' f h8 x: ^" r/ f. G8 _3 S
该函数用于对文件进行高级读写操作时。
% }! Z8 ?( V9 F" Q6 W3 j/ F! C! m0 ^& p( G5 l- g
' t2 F5 O- Y0 D& A! s$ A. {% u9 [ 文件的锁定和解锁
' l2 ~7 i3 z' q" z$ r8 R
6 X* Z5 `4 B5 E" ILockFile . Y8 G6 P% |& o! t/ X8 s/ f1 p
UnlockFile % r1 D- Y& x, O( M; F; B- P8 Z
LockFileEx * }3 t( J4 _! B5 W2 v
UnlockFileEx ' Y3 ]4 j& I4 I5 }- \9 c8 k
1 @& x% ]* L2 S e% X
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。3 _: }. k! A$ S8 _3 n
@# a9 A( E+ ~* _' r( t+ D 文件的压缩和解压缩
4 G" a* I: K/ P% @) @* g/ P
" V- k: ?) v$ o8 Q& _' oLZOpenFile
/ X T7 E- a/ t6 j8 n: f5 N+ ~9 ]打开压缩文件以读取" Y4 T" F% T+ T& m2 P
% N+ A0 i+ Q1 H& ?0 c& ~3 oLZSeek + ~" Q% L$ o4 {! I+ o0 Z! {
查找压缩文件中的一个位置
_( n( p9 L2 O% i8 |1 O
4 f9 R8 c$ U) Z4 r5 i) VLZRead 9 ~3 r8 B* d1 y; o4 l2 Z6 e0 j
读一个压缩文件
) e# W6 L2 T8 {1 u7 w. y7 o
7 S$ |2 y+ B+ fLZClose ! z' r3 v0 C& s. E$ G. p
关闭一个压缩文件
$ { U" J/ D& v; H+ ]2 L8 A, s$ O9 |' y9 @& V6 A7 L# q
LZCopy
) p: d, A) b/ b( z+ g复制压缩文件并在处理过程中展开
1 ?# Z9 T7 M$ b" t: _( X2 S4 v( Q. d/ T& Y! p/ p- r M; v
GetExpandedName
# s/ \( p1 K Z1 h9 ^从压缩文件中返回文件名称。
" L# t+ R& V8 X/ R- ]) m% B
( `4 I6 {" r8 E! q) z7 A以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。8 h ]7 d$ y' \' W. M
$ M( r* ]( n0 u2 }7 Q- i: g3 U, k" X* @: u3 s% c7 D1 o
文件内核对象
7 h2 w7 z" c/ J- x# _; J4 B6 U
) {# @9 Y6 I% _ 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
) d) B7 t0 `6 _0 t. @, H% i% }1 t0 ]
1 _! Y ~. H0 ?# }. Q: U8 e7 ^7 mCreateFileMapping ' E8 U1 W7 @+ ?- R @2 R- U+ C3 M) D
创建和命名映射
0 H! {+ Z( j6 k, z: {, t
0 ]5 @1 J0 O& a( d6 TMapViewOfFile - N" |" s, N# G2 G# c5 ]8 ]) q
把文件映射装载如内存, n, S3 H! t3 ~# i- w
4 g, |3 I: Z4 O7 Q( p/ D& C6 |' lUnmapViewOfFile ( `' o( [: k: s- R; H( S. e: A
释放视图并把变化写回文件
- s7 A- t5 v) h( o
" S9 q3 P4 w2 TFlushViewOfFile
9 S7 F: l% f% z) C将视图的变化刷新写入磁盘9 B- j; `2 q9 I& i4 Z8 S
: V. B. v" u/ M8 @7 v# x
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|