|
|
文件操作 API 函数介绍
5 g6 j5 s6 R) [' R L" L" `. N) Y4 d
/ w& e* h" `2 V7 |作者:zhanglc$ h$ }9 \5 X8 H" G
; o/ z3 _9 l6 ~9 n1 r- O# ?- [' E$ w& A" A( K# t- p; s
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:" z0 z9 ]* D- K9 i1 e1 \
: t+ O# p/ W! A: P" K9 e
一般文件操作 API9 p. d1 S0 k3 Y2 l! w+ M7 H
! m' x: Z K+ {: ?: LCreateFile" ~2 z* z8 |! I. ^. t& [7 S
打开文件
2 {% `7 K' \& \0 z: T1 n要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。% [3 C F# _4 G$ R7 c
* m* o* c4 x3 O
ReadFile v- b) X* I: N5 j% M0 @! T# S: K
从文件中读取字节信息。 8 |. Z6 {# y i" T
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。- D0 a, m3 f/ j7 T4 V, _9 @
+ d1 d0 f6 j, f. A; F. z8 _WriteFile ' v' L$ p7 F$ B' y6 e
向文件写入字节信息。 - J c4 P" ~: o9 {
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
2 R$ I A* e+ Y4 n6 K) q/ l2 x
CloseHandle
; t( M. }5 ^, T关闭文件句柄。 ! t! [' m: G. d4 f, R* b
打开门之后,自然要记得关上。4 H* [& P3 z7 v4 I
- G; s2 n9 T; C# s
GetFileTime
5 q$ ?' ?! Z# N& Y( N0 H获取文件时间。 & c: e" g( O; o; X% K; q- v
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
0 t6 p( g9 X# B0 L7 q! T8 ~* c该函数同样需要文件句柄作为入口参数。
- D& V4 S% K+ R. K0 X0 ^6 p h( s; z) H- N" p4 {! z, O# n
GetFileSize
* G7 c, p" P6 O) v( T获取文件大小。 3 Y* l0 y9 E7 K1 Q6 }8 D
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
. _ E1 R9 Y" p2 J, q1 q该函数同样需要文件句柄作为入口参数。0 W: E* _8 f8 W* [. Z5 k
# A2 k1 m2 G% \) XGetFileAttributes
P3 u0 g o: _% j" [* [) i: _获取文件属性。 - {7 F8 I! i- n# W! j
可以获取文件的存档、只读、系统、隐藏等属性。 # z7 r: q6 X& C* }
该函数只需一个文件路径作为参数。
* r* v+ k- u0 v$ l" i4 u( M
- w' v2 w" y- Y7 m/ SSetFileAttributes
O/ G# F" c+ Q$ X3 u' Z设置文件属性。 " }7 m& W+ k: I: `
能获取,自然也应该能设置。 ( a8 I+ q) o4 t1 a/ K
可以设置文件的存档、只读、系统、隐藏等属性。
: `; n0 }) q E该函数只需一个文件路径作为参数。' F7 f" O- N) E! e9 O1 _( W: [
- u% I6 b' j' P; |& L1 b! dGetFileInformationByHandle
. a# }( |8 B: t/ c6 Q获取所有文件信息
/ ~' O8 e: ? B" \+ {/ v: }该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 0 R1 e Y5 K3 w- W
该函数需要文件句柄作为入口参数。4 w* \9 h4 c: a2 l; \" ]5 V
# |0 A9 S* y/ p; D( _
GetFullPathName . @% B! O7 |6 O2 S0 x! ^+ z( N
获取文件路径,该函数获取文件的完整路径名。
1 L. ~. r6 ^/ y8 D$ P* M7 A需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。0 N% Y) v3 R" G* d/ K
4 Y4 C* G3 O' G8 h3 Y# @
CopyFile
# V5 g/ G: |7 l8 ]) M1 l复制文件
. J) G5 A6 ~7 ?; M* R. |9 |注意:只能复制文件,而不能复制目录: e$ f3 Z2 i" Y8 t
$ X/ b) O+ n. p) X1 w' v! V
MoveFileEx / E9 d# w# Y) U- w- S V% e
移动文件 ) c# U1 Y+ ?/ h# ]
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)& |/ q3 s8 o* ~# Q# ^
+ o0 P# S- D7 ~( Y, U- m
DeleteFile 4 T0 B3 B/ o3 z3 I
删除文件% U7 u- u- [! P$ Z
) }" k$ R, y2 e
GetTempPath . J4 M5 c( @/ C) H N# d
获取Windows临时目录路径* x7 s7 ^. D( C: o" X
- G4 d- J; h4 ~2 L3 s2 T" c. e8 c
GetTempFileName ; e! O: r2 E& I
在Windows临时目录路径下创建一个唯一的临时文件9 ]: r# ]6 B( v. e
8 [$ [3 F9 ~. n* q4 E, Y' v$ `
SetFilePoint 1 B# U0 L4 {+ A4 @+ T0 K
移动文件指针。
2 c! |4 b3 p, b该函数用于对文件进行高级读写操作时。/ G( q& y2 `: W3 y
5 c9 }8 i; Z; }/ J: M/ s
4 A- K4 I- a/ m* a/ c
文件的锁定和解锁+ C2 f$ B/ z" Y0 ]0 D9 i
/ U, l4 d. R( qLockFile
: W! Y/ D1 K3 s4 A& |/ ~6 z. VUnlockFile ! }0 e2 f$ Q, b) z
LockFileEx
" F. E( d" l- ]UnlockFileEx
' ?7 _+ O5 w+ j4 }
! {: R- a" j9 h; M- [" z以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
4 K, R3 `0 ?) }4 E/ d
* w* B1 T3 k% v3 b. G" ]1 ~( S1 A# ~ 文件的压缩和解压缩
" N; `+ s* ~0 H+ G* ^
! ?. x6 v; K, Q9 \$ G2 jLZOpenFile
1 y; \- c' r3 U( L: }2 n打开压缩文件以读取
$ M1 j0 F$ }' l, @6 |/ p- P5 w3 F7 m1 d
LZSeek & ]; I) M! x) l. Z* I
查找压缩文件中的一个位置
3 j: F8 [4 q$ x( H% `, r. E. b) p9 X4 H: H6 W6 R! S; w
LZRead
. {- C" \# b X# J8 ^4 f' [4 t读一个压缩文件; _, o. j* J4 c: d' r" @
# x; q# E& ^& D: s/ qLZClose
8 R5 _/ x/ e1 x+ L5 k' f关闭一个压缩文件5 n- V( Z# l$ T" T7 j0 J" D
1 T. |* }& v' K# D; b7 s4 T) D
LZCopy 8 h9 K1 s8 d7 I; x6 H
复制压缩文件并在处理过程中展开
" ~, C5 g C6 D
" u/ Y4 z8 k' y% ZGetExpandedName
( Z5 S: }: l$ ~' h从压缩文件中返回文件名称。
. a% ]: C) L8 m' R- ]0 N; `) Y K$ z6 H8 M) J- z( A: g0 g( T9 M
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
% l, _5 P+ |( M, T1 p* O3 N
+ _+ ]5 {8 y- }$ z/ R$ K3 \$ Y# O s! j4 E1 ^
文件内核对象2 Y& [: {( M# B( U' V# M, J; O
7 Q& h+ `' E: D0 h+ J# l# l. X 32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
" K5 U8 Y: _ `- C# H8 [
0 K9 [7 q1 x* H0 P& q3 S( CCreateFileMapping
/ H- }( t# A- f$ [创建和命名映射% G6 g9 ~" C, N9 h2 B$ B. _
' T, O2 F! i9 {5 uMapViewOfFile
% j; n6 Q" R/ `5 o把文件映射装载如内存' H# M3 f1 f# x- Z* ^
1 \# O- }" w: f
UnmapViewOfFile
* }9 C/ Y8 G4 x4 V T8 {释放视图并把变化写回文件8 l! b# W$ X+ |, W" V7 Q1 O: D6 r: _' e
: X5 @7 b. o% j% I
FlushViewOfFile % G- b( j. p X g9 H
将视图的变化刷新写入磁盘
; Y" g$ t: w4 R& E% J. F4 c, ?! c( e e- u
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|