|
|
文件操作 API 函数介绍( G1 c( e$ o6 z9 r5 C: o
7 ]- {' I1 y$ A0 \# ?# ~' s
5 j8 C, v# @9 c
作者:zhanglc
$ y1 f W: C2 \ F5 r5 q, c
1 R: e! k( b' G# B. R' U2 ]; v! u/ A5 _+ n8 k
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
& n `0 W3 k1 w# x; K: a6 N5 e1 A6 ^8 e, D4 J5 j
一般文件操作 API
7 }, Q" ~1 Y# j5 I. G) y2 [. U& d4 R- N
CreateFile
7 z4 a1 s; c6 E" ~7 q& b7 R+ y打开文件' b3 |6 I& U6 w1 ^7 @9 ~
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
/ x( Q! G$ h9 A! r( X% o
% l' P0 B- @) R* x' iReadFile/ O1 x9 t; s: a7 a+ ~# G# l
从文件中读取字节信息。
+ F. c+ R' I( Y/ n: L( ]# I6 g在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
( r& m# G# B \
9 E, B" v& e3 sWriteFile
/ C0 J( n9 O7 B' O1 M0 y2 Y- ]向文件写入字节信息。 % ]! [4 L" a- T' R
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
+ L9 @5 L/ R# V: C C& [% }0 `8 D
5 U& n* b! O g' X% y ?CloseHandle / B: U6 n- S% z
关闭文件句柄。 0 @( [" g5 X1 O0 `7 g5 c; a
打开门之后,自然要记得关上。
6 S2 X" `* k0 ?, W2 e& `9 J7 X; h" S! N% x, Y
GetFileTime % P+ t8 {) Z# W$ a* @2 d/ p3 I
获取文件时间。 / v/ A( T8 @$ Y* E) F( k
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 . [7 }* C; @9 R8 @$ k! o
该函数同样需要文件句柄作为入口参数。
$ D( ?1 y# ?4 ^9 ^" E7 i# k- z
& w2 y8 i2 @$ ^GetFileSize ^" k! x# z* [$ v: K3 b
获取文件大小。 & B( n8 T9 _/ `# p4 X X9 P% R
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
+ n0 U* w& S9 ], U# T& Z该函数同样需要文件句柄作为入口参数。/ I. g* u7 c s" K( i4 ]) k% H
, c# B; ?( I' H4 L# O- S! JGetFileAttributes
4 i/ O' E; W- ~0 q7 g: K获取文件属性。
& Z. n3 E. X4 a2 o, e- }- ?. p可以获取文件的存档、只读、系统、隐藏等属性。
2 o) a# B$ u; V) X该函数只需一个文件路径作为参数。% O4 B8 V. R3 q) v1 ?/ E7 _/ K# k
* j) s7 V, q: p7 ISetFileAttributes
8 e3 K0 }; H7 F w, Y设置文件属性。
6 M* ~! ^9 \6 a1 z2 w& C能获取,自然也应该能设置。
! t, V3 `5 m. ~' _& k可以设置文件的存档、只读、系统、隐藏等属性。
+ N! Q/ E( ]) y0 G+ @0 w5 A该函数只需一个文件路径作为参数。
6 H0 ^4 v* _. ?4 _$ \) Z
; e- M: G1 i4 h) n. k4 A8 KGetFileInformationByHandle
+ \- y8 U6 s6 r- [' {9 F获取所有文件信息
, v/ R0 B3 E; m+ ? G0 A该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 5 \0 B6 `( a4 K- Z$ y: g
该函数需要文件句柄作为入口参数。# p5 n$ @% G" H, c
* Y& @/ |1 |0 z$ P% jGetFullPathName
% D/ J* o% T5 D$ M$ H6 V获取文件路径,该函数获取文件的完整路径名。9 p: I8 W! ?0 ~4 G0 T/ n
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
) i; U; T9 n& V; F1 n! N0 B
& B1 s+ z' ^6 k0 J" `. p# u& G) |1 tCopyFile $ w9 R; b5 P, {
复制文件 + k" g6 a3 Q% n, v
注意:只能复制文件,而不能复制目录; K; R- }* s( j& o3 B8 u2 L
$ S7 Q6 _7 \$ i& h: r
MoveFileEx
! w5 F, i& l* {! ?: L移动文件 & [5 Z5 O& [! U1 d
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作). k3 }, H4 @9 J( ]7 a
! w, D4 N# X# ~3 N/ P4 @" }9 [DeleteFile
6 ^1 `* w+ w) J, h4 }% ^) S# S删除文件
8 j" v8 \. U. X$ j: `9 x {9 q6 d' V1 ~( s1 D4 B D; j. V$ T/ D
GetTempPath
' h+ v1 f9 ~: x2 t& d Z+ u获取Windows临时目录路径
3 S. i3 y0 {1 ^# B3 @+ Z* l# t- X: g* c; j
GetTempFileName
" m5 k3 V. x) I, I; H0 G在Windows临时目录路径下创建一个唯一的临时文件" o& h0 ]# g' r5 a
9 C2 F3 X, T9 T U
SetFilePoint
% s: }3 I- e- V, r: R% x, [2 _' s移动文件指针。 . _$ l3 z' J/ Q
该函数用于对文件进行高级读写操作时。. B4 l7 V$ A! h( @6 t: m
! R8 w! g e. q; K7 q% k0 T0 U1 y$ F$ O* B9 N& [! O2 j* h/ a
文件的锁定和解锁1 c i. l# n8 a* b5 D, I3 v+ g8 o
' X6 |7 T0 Y. A$ J! E; s
LockFile
5 p8 r" H2 r& n* p B' TUnlockFile
1 ~4 o' M! N) c; d5 C5 QLockFileEx ) M+ u$ ` H, X! e
UnlockFileEx ' |9 [: T* N4 Q; F" x1 ~
; n4 E' J- y8 z以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
& f- y0 B: e4 M* G: s* C! H; m9 D& b2 X' K$ s. q
文件的压缩和解压缩
c1 a, u" l- _* R' O5 H4 {, R
4 z3 P+ H7 a$ b: DLZOpenFile 5 r; g; R1 U2 y
打开压缩文件以读取4 [( M6 H8 C* B* c# D8 ~
# V8 O0 O; X+ L+ i' TLZSeek 3 l7 X$ l* W) }9 l. T
查找压缩文件中的一个位置
( R0 O/ a% t: K9 l6 ?, [. F1 _# @5 D" h& G
LZRead / m3 {, z4 p" o) d# E& o- `5 x! S
读一个压缩文件0 c; Q, X; f0 I- D: r2 M
% s7 @' P2 h! u
LZClose * z! Q$ W7 z7 J/ n; x
关闭一个压缩文件
! q1 N$ d$ D8 M' A% D% l$ g+ r( z( g l$ r6 L5 w9 w! P7 T ^0 g4 i
LZCopy R7 @% u+ K1 Y' r
复制压缩文件并在处理过程中展开0 b8 C) |1 D1 J
; y( B; o' C5 d4 L; A* I4 lGetExpandedName 6 r' y9 b9 e- g6 V2 c( w, H
从压缩文件中返回文件名称。+ d, |6 g5 e/ i% v0 \
1 v) i- ~* r- j' h以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
# K3 O% h3 w3 E/ F
" q6 B4 H0 u" c+ W) H" M* H8 p
8 `8 X: s3 B/ Y( W' g4 t1 l' z, m8 V 文件内核对象
6 Y; N2 W8 R( R: s/ Z% G3 X( w# r% f8 f4 M. g( G
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
$ O7 t0 d4 P! |) Y% C" Z7 l* a1 ?5 ]' t9 k: p. E- h2 ^6 P3 J$ L! i! X: v
CreateFileMapping
' N6 s9 T2 @0 P5 I' v! M# M1 g创建和命名映射 }& A n' s. r% J# L$ Q3 W
, C2 ^: u( Y' L* r3 E" T' Q* fMapViewOfFile * S3 k( T( [ E9 o1 [& x+ `
把文件映射装载如内存
& N! [' p0 A6 d8 G/ [9 Z, o
/ t0 y; _ s3 E" ~UnmapViewOfFile / k7 d& I, v" s. m' \( R
释放视图并把变化写回文件
' U v* h! z* L4 A' m/ O% b& Q& V# P0 `
FlushViewOfFile
# f' W% H2 t6 ]; P# r T将视图的变化刷新写入磁盘8 X; \/ W; {1 p0 I7 f
D) P* i( q/ z) |0 r8 Q) |
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|