|
|
文件操作 API 函数介绍5 g: B o! D# j2 _, h, ^
" J7 D8 {3 T1 H' Y% Z( r7 W+ c
|) T. p$ N3 D) h3 b* I6 D
作者:zhanglc
, G8 \. R+ ^+ Z( b# z# @" G6 d* Q6 [8 j f( O, O
( a, R- i( z5 ^% {+ v% e7 Z( [3 Q- E 在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
+ @/ A: X# ]' W# t
* }2 H/ y) F x$ l 一般文件操作 API
9 I5 r" ~, Y' G) I6 C% y6 y) r5 Q( R; T, q
CreateFile
7 M+ q" R W# g7 C7 m打开文件
" \* ]0 w" Q. }9 y8 f7 o7 A要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。; T( Y. K5 u/ K$ W; Y, _
$ Q8 k+ K4 F; z* O( r0 }. t: x/ e
ReadFile
+ i/ d+ s" n* Z1 j4 ^4 F9 J. {/ ^从文件中读取字节信息。
/ n4 _: i4 ^! y$ Y1 p# S8 j; `在打开文件获得了文件句柄之后,则可以通过该函数读取数据。- u3 S A3 S# j1 B V! ?! T
; e: X4 n @8 Y- q6 V2 _4 ~# _
WriteFile
/ S! G D$ U0 v) j9 ^7 i n7 x向文件写入字节信息。
* ?2 I! p2 p" z) l同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
3 x2 I9 _' C' M( y/ R8 I0 d7 S3 n9 {% Z4 o# O. n( Y$ d
CloseHandle
! I7 t7 ^& w4 e关闭文件句柄。
7 H$ V9 V! m: v8 K7 T; t f8 n打开门之后,自然要记得关上。
?0 ~- a& @! `% W7 O# V5 S, @% N! ]2 i4 `0 p2 N
GetFileTime
' L" U; o+ B$ n获取文件时间。
4 w* O. S* M$ w) I% Q: R+ x7 e有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 7 w! l- t. d9 M
该函数同样需要文件句柄作为入口参数。7 a, ~! N$ C) G- ]- k+ [/ M! S, |7 R
2 d6 O l# K4 w4 }) N; ], uGetFileSize 7 Y+ \9 b9 Z# r# ?
获取文件大小。
6 G9 E# Z( ?; @/ ^9 C. C! D' x由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
; p ^% h6 q8 M. N& d3 R* T- G# m" i该函数同样需要文件句柄作为入口参数。9 V! z3 ~- K. [
8 l7 s6 f7 B6 s3 p2 P, J4 z
GetFileAttributes % d5 D! o! U, |, c7 D/ T) a
获取文件属性。
& w' n$ O# f; f* } C8 T7 g& r( p可以获取文件的存档、只读、系统、隐藏等属性。 & [; @# o z" |7 `
该函数只需一个文件路径作为参数。
, ]2 b( _4 Z( w G0 a4 ]8 h- y( l4 y9 p F8 n' B5 Q1 T' \
SetFileAttributes $ F4 J) d: }6 X8 r
设置文件属性。 : t1 b6 C5 S. O1 e' A* T% H h
能获取,自然也应该能设置。 : X. _/ y( Q/ A6 J6 x
可以设置文件的存档、只读、系统、隐藏等属性。
; w# x0 A0 ?% `8 H3 | L该函数只需一个文件路径作为参数。2 ]/ z, y- j, N! U- o8 S
" E8 G* t. {5 Z9 \GetFileInformationByHandle , J1 ^1 I! R5 m* j1 B: H& l
获取所有文件信息 3 A* }+ T l% V' l! R8 a
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
3 ?) _6 ?. y+ l$ Y; e; I- I; h. n该函数需要文件句柄作为入口参数。
) `9 [! x7 n. ^- p/ E; r* h* Z/ Y1 |7 [4 w! m% q c
GetFullPathName
& f) {& R6 Y' V: U# X获取文件路径,该函数获取文件的完整路径名。7 ` J8 |- d* c$ O. E
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。9 [( R) w$ t" s n
& s, O! N6 p4 i# B! {5 L' Z
CopyFile ) |/ l5 z3 J# \1 [8 @. e
复制文件
7 U" e/ G4 D/ c1 t9 z$ Y; q S注意:只能复制文件,而不能复制目录
- I z6 G, V. k) f5 e2 D- v. V! q6 z- }+ Z" j8 A% q1 b7 i$ o
MoveFileEx 5 j, D% h' ?1 H0 p7 X& U6 h
移动文件
& L# P4 L5 x0 p5 X2 J既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)6 x4 \8 H0 B9 v* S* ^& w0 C
* Q+ g2 ?& p+ I8 ]
DeleteFile 8 M- z& G1 c/ r. _9 x0 C
删除文件+ C0 t, e+ M: n" E: G) o: c
$ [3 L7 c# b( A7 m% |. H b1 {GetTempPath
3 x9 H9 L1 i! z( @5 _$ A; g( c) r获取Windows临时目录路径- \: u4 E, o1 x/ l! F5 G
3 f- R: j" e5 FGetTempFileName
) E- W" l0 l% m8 d* |在Windows临时目录路径下创建一个唯一的临时文件2 b4 t. u# ]& V: {
1 p$ M# a" o6 H+ T( b( iSetFilePoint
1 z; f0 A( w% H/ y' O移动文件指针。
' A9 r, p* Q$ J* z2 q该函数用于对文件进行高级读写操作时。+ H2 Q9 g" j9 S0 t, g3 M
3 E: U5 e% }0 U5 q
* J* Q. T% c; O1 h 文件的锁定和解锁
4 l' G3 z2 R- v! J( l4 |8 \1 Z3 W; ^" z
LockFile ' U2 p8 e# e& }2 ?
UnlockFile $ P8 f: r- {6 J! B6 z# z+ [* f7 G; B
LockFileEx
' u9 p [' t1 A7 \( |& _2 z0 fUnlockFileEx 3 Y) k0 O- X3 D
5 Y! G' M3 ]% K; e+ N( }以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。4 n E4 O, d' p% Y" Q" X
" T# H* G" Z, J+ k, K! d 文件的压缩和解压缩
$ @$ R2 _% r: I8 C& m: a. g# ^0 o s& m# s
LZOpenFile
7 T9 E3 m1 i8 i) l打开压缩文件以读取 q7 l) F& P1 R: j: ^
0 k7 C( b/ F/ C( ALZSeek
* V4 ?6 n: v' O3 Z查找压缩文件中的一个位置9 {+ l( u+ j8 A$ |$ H2 y
2 D& W z2 Y5 uLZRead 5 i, O X. n7 y' v. @; R
读一个压缩文件
6 v! j7 c+ o8 e. @: o" n
; Z0 x9 Y! \4 s/ z4 F0 ^% C' vLZClose - v1 v& Q+ T( l: G
关闭一个压缩文件
3 G7 z4 ?9 X' J) n: `* H+ V
. O$ s( v$ ` J& j: u5 yLZCopy ! m. S& B- N+ |6 \
复制压缩文件并在处理过程中展开 Q. a* ~# q* b2 ?& Q
9 U- X9 O7 c8 `0 aGetExpandedName
2 f Q* c0 J. L+ r+ j* \, ^7 R从压缩文件中返回文件名称。
2 x2 ?: j# T6 Y8 X5 t4 M, M+ P6 x, F) R/ B! v
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
% X0 `7 E9 t: m
: p/ s+ Z3 m( L3 z. Y" \% A2 F
! E! u% \1 j+ e" S 文件内核对象
! u+ w j* A- q, Q; Z& d4 A# F$ J4 K" v7 a
32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。4 d# R. }( G' M9 {
9 @! e+ ? K7 z
CreateFileMapping
z/ }5 k5 ]* |; A6 h创建和命名映射
, ^% w; W- H O! i3 `3 `1 T! O# f& N+ Z' h" ~- F @
MapViewOfFile
2 l$ n: d& m5 t4 L6 t把文件映射装载如内存/ f& t7 v6 y1 E) d5 B) d
# L) w7 Y, B) Y6 N
UnmapViewOfFile
) {# | U" o7 n, Z- t" {4 P释放视图并把变化写回文件
' M) h' _+ l! K) @6 t) s6 Z0 G+ N* E( o, w2 ]$ o, K
FlushViewOfFile
) o' ]( @% t9 D# U U# z将视图的变化刷新写入磁盘
8 ^- W) e1 Q8 [
2 p) R. w+ B! O: K4 `: L8 W' ]- T希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。 |
|