|
文件操作 API 函数介绍, f% C R0 W a8 e' Q
7 `& |3 G7 y" Z3 m" Q7 _# ^4 K" J1 j1 j! X# g+ ?" [, e
作者:zhanglc/ j& H6 w* a+ q1 [' w, j
. i. e _3 t* ?; G0 b0 U( u _+ @9 |
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
0 A( G; b) m, ` H! x) h5 o, D# M0 D
( u1 ?. w4 i, ?$ x! ^+ x( g: Q ` 一般文件操作 API f7 E& m( P* f
6 K# y5 ?% Q, cCreateFile
; ^( T* i+ V0 a打开文件: q0 u/ l8 ~- C y
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
3 K5 M) ^! z- U) k; {
. K0 X5 @% ^* I4 O/ H! K1 G7 i* AReadFile
, Y0 Q* G- `% Q- D& W% x从文件中读取字节信息。 + l* D7 C$ }& { E, }5 L$ M
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。0 \1 \7 Z3 a" J1 v9 k: t
% j9 T, K, I$ C6 w# u: o* O
WriteFile 7 d+ Z5 s$ Q! s9 R- x/ N* k' K) C$ U
向文件写入字节信息。 * |- s/ [+ D/ x. d0 E3 h
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
3 ]( g% \4 n. {) k% M7 U$ D9 z( @
: x% _4 w6 Z2 PCloseHandle
' H0 z$ Z. m+ y关闭文件句柄。 4 k) v! i; T$ U! z+ V
打开门之后,自然要记得关上。+ I/ s$ { g5 N7 A1 `
- s5 ~7 p$ u- t% H2 n4 D$ q
GetFileTime
+ @2 P8 K. s7 n% d8 @. h e获取文件时间。
8 m; R" z" b. ]* E有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
; X+ e$ ~$ ]( ]7 h) o3 ~; f/ r该函数同样需要文件句柄作为入口参数。
9 A% K! v$ q5 S* a) R- z# e( C. p- d v$ I* N6 u
GetFileSize
% ?2 d4 ?! R2 b' u( K1 \获取文件大小。 6 {: ?' \* X. o) ~8 v7 c
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 % |3 |1 ?3 W% E" c
该函数同样需要文件句柄作为入口参数。
- A1 W5 G+ Y: ^. e- X. `2 ?
# N# |) ~, C. G! FGetFileAttributes
& d3 J# W; h, X$ C: Z* r获取文件属性。 $ d- M" V3 s( y$ m& {$ t
可以获取文件的存档、只读、系统、隐藏等属性。
: T& P+ x* @) w" j7 E% p该函数只需一个文件路径作为参数。4 X1 _% |; F1 }9 k4 e
5 p# j- A# {. V" l" N% D/ F9 i
SetFileAttributes
; k6 S: D9 \8 A* Q: r/ n5 e设置文件属性。 % S( `& V& A& Q8 R3 ]7 ?
能获取,自然也应该能设置。
. J0 t, W9 z! z k1 J可以设置文件的存档、只读、系统、隐藏等属性。 + ^$ b* N/ B& w/ t/ l0 @
该函数只需一个文件路径作为参数。8 s, E$ g) @4 ^
( G# w. a/ o/ I# z3 uGetFileInformationByHandle
* c) `! m+ \! Y+ l获取所有文件信息
& R9 _6 S. l! J8 ]$ k; o该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
9 u5 q& y" d* V+ D- B该函数需要文件句柄作为入口参数。. q# I: m- P0 K7 b- G' s
/ p0 p5 e. {$ B& g& a. F
GetFullPathName ) n9 @; @8 _6 k, G
获取文件路径,该函数获取文件的完整路径名。 Z6 o& W9 J6 D& s i
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。1 X z( o+ T) o( J5 s5 \5 Z
6 c% }; y1 n; ~' D5 j: M6 S% ~# PCopyFile 2 {$ O! h: i. _; V8 ]6 `; z, W1 z
复制文件 3 m) z! I. H( X* F/ H- f
注意:只能复制文件,而不能复制目录
( W& m$ q) E" d9 J/ R% H7 a6 w! _* f4 p" |9 N. R" z6 q
MoveFileEx
9 [2 N/ U9 p* _- A6 C) q& @移动文件 " z$ t2 ~2 j, e# u( g6 x r
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)+ g: i1 I+ Y6 W9 a4 M# T) s
6 C: D9 @$ p. c1 C# [DeleteFile * c# l0 F. `5 W' x
删除文件& F/ S& ?+ m$ j+ T* Y' ^
% M( m$ e& G, |1 G- z+ m, L
GetTempPath
+ E" ^& {$ f$ k获取Windows临时目录路径; _: x4 H @- u' |( ]
' ]3 Q5 A1 \: e) b8 _% jGetTempFileName + [# D$ `6 w* U- o4 e
在Windows临时目录路径下创建一个唯一的临时文件
" u! @! f, u: p6 s/ p0 q& H- T! @7 t8 {: @ e5 Y
SetFilePoint 9 X1 I4 d2 g2 X9 r
移动文件指针。 / q% c* W* I0 K( c
该函数用于对文件进行高级读写操作时。
! n5 r; ]5 z5 V" D8 [/ p$ x6 t% U& G7 z+ P/ }! Y2 G
/ x: m4 P. I! ]4 h- b 文件的锁定和解锁
6 w- r M4 K+ m4 Y( R8 @( {
6 U1 Z8 }" x/ J% v% {- BLockFile & {4 m2 p7 a! ~3 B* A
UnlockFile
3 f) ~1 s: F2 ~5 G0 D& | tLockFileEx
+ F2 B% \1 y4 {' E3 OUnlockFileEx ) O3 h+ Q" Y0 T8 z* A* P" ^
% o# A% O3 w1 i6 J2 Z5 `以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
" I8 i" w, I* t- U$ ]0 j& S) d- b# D" ~, h5 l" x+ n* t
文件的压缩和解压缩 O9 A- p1 k) k1 i- {2 D- R: f
/ x. B2 y: L& ~6 W+ @$ o* m6 D' yLZOpenFile
' }8 O2 j2 Z8 m' e/ n3 _$ P打开压缩文件以读取+ \( {1 h2 a# K1 B8 `3 y; [9 g
6 ~) Q) x( V8 N& I( B# v
LZSeek % j* `, |: U/ B0 T9 O8 b
查找压缩文件中的一个位置
+ Q. `) A+ G7 z. P
4 Z3 g$ @* S; Q# G+ _, l7 PLZRead
$ X( J6 J8 A' F读一个压缩文件
8 ~# p: q" x' u4 @& g) N7 o7 S' ]' P+ o9 R# O
LZClose
9 A; Y0 a% h& O1 X. u' }/ q关闭一个压缩文件& _6 t! t: ~+ E$ F
& V( U7 z* F) _9 r2 }0 n: R
LZCopy
! U' h2 B! t" r4 X( w" {复制压缩文件并在处理过程中展开0 `2 Q( [( _* V* ^
+ ^1 \, E0 K6 O( q% l, q2 I6 x, q
GetExpandedName ( p/ ?+ N4 b: c/ k- y
从压缩文件中返回文件名称。0 {8 M: t/ @, m+ Y5 w
' u- o! q8 \9 C8 @
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。, M0 Q+ ~: S: G1 t; U
9 T, C# X. W7 O1 f# o- @' p
( D0 r. C+ y* Q
文件内核对象
# V8 O' |" V3 a4 r6 W& N
. F4 U3 m/ u ]4 t( Q/ A 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。/ ~6 T- X0 A& X3 ]1 S
) i7 G* o2 ^6 E9 f5 oCreateFileMapping , _+ f0 U- v6 ?* f
创建和命名映射
& P5 h& V* ~8 J. ~- v+ R' v2 `% k2 h3 o3 Y; [
MapViewOfFile ! y$ p( s6 ?! l: j
把文件映射装载如内存
6 r5 }1 b& r1 ?- \" P: _' ^. E, e) g' q- F2 g; h! }
UnmapViewOfFile
- _1 j5 g3 J+ X) ^( z' H" c" r释放视图并把变化写回文件3 Z% c4 j: |+ T) A7 f
- z" M3 ]: y7 F9 W; L! bFlushViewOfFile & y8 a6 `: x& Q" s7 H H8 L
将视图的变化刷新写入磁盘7 C0 F; X9 ~/ J$ N
$ f" Q% w. w, J* p% M$ e
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|