找回密码
 注册
搜索
查看: 4715|回复: 0

[收藏]文件操作 API 函数介绍

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍& Q/ \6 H) f0 Y5 S  b( n' ^- V

; L8 `" e# v7 F) q- N2 G- s; f' F- H+ [' \6 ~
作者:zhanglc: G; j6 l' I( F9 z3 q; u4 e0 M* p! e
' I7 T( w1 j6 v  p/ E: \  N. b
5 i1 c7 J. u3 S
    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:4 o0 o' G; V3 ]
8 f; n% e# D6 I2 T2 f
一般文件操作 API
) R2 B6 v- l& R2 D& [, ^4 M0 W7 f% ~& w$ @0 q4 ^
CreateFile4 q! K& s+ r& f0 K' V. G
打开文件
. f5 j/ r% i( ?# b4 y& ^2 ~5 ?要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。+ z9 t5 D- Z6 ]- i5 a+ d
1 {9 k* y3 S$ I/ }1 ~" n* g& l# T% ]
ReadFile
: p! Q+ ~6 `- \; _6 J从文件中读取字节信息。 2 Q  c! A9 E& ]9 ~, q9 h4 M
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
6 b7 B' a! G  ~, Z
4 x! A: B. I& H  dWriteFile
  ?0 t* u8 {+ `向文件写入字节信息。
( X) X. U; U; b同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
) K; n3 E) ~- y$ y5 m: f* }% V% V) a) J
CloseHandle
3 e* |/ q' P8 t! Z2 }3 Z关闭文件句柄。
8 B7 q' {- {, @2 s打开门之后,自然要记得关上。; j+ t% U- n3 v6 _* J

" @; h& i2 n" h' }) UGetFileTime
) }9 o  ~5 A. }2 B+ L* x获取文件时间。 - U7 [) {/ P: q& |  D3 }
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
5 h) O- P3 M# I+ Q5 B" c3 t  F该函数同样需要文件句柄作为入口参数。
! v7 y) ~, W% n% w$ u' Q6 Q9 G- J9 x4 R9 v
GetFileSize 8 S  |- n/ ]" r3 |5 |# D
获取文件大小。 ( \* b+ v0 W& Q& x7 W9 z
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
& W- j, b5 V0 a; t7 i% x该函数同样需要文件句柄作为入口参数。( ~+ o1 B3 j$ e3 w6 u" [$ b
- x- }1 S7 [# d3 |0 u" r* t
GetFileAttributes
( U/ L# M" G  W/ q获取文件属性。   K1 c5 H' i; ^
可以获取文件的存档、只读、系统、隐藏等属性。 5 n0 ^6 v* @0 i
该函数只需一个文件路径作为参数。7 q- {* `/ P8 I/ b! c
0 x0 P3 a; V! \- W: T6 o& I
SetFileAttributes
0 R& ^5 G& Z1 _" P设置文件属性。
) _' g9 t" m. h* i  t能获取,自然也应该能设置。 : I8 Z4 m5 z6 n9 p
可以设置文件的存档、只读、系统、隐藏等属性。
+ A9 t: ]! ^! |& V该函数只需一个文件路径作为参数。
. ]& v! S! k" j" ]* f  \5 u) G9 b" B+ k4 r# b9 L
GetFileInformationByHandle
* T5 I6 ]; a% E: l获取所有文件信息
" H; W" R' _( n. q该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 2 R% F; a! g: Z9 A# d% ]
该函数需要文件句柄作为入口参数。/ w5 ^6 g" M, G( a2 _

/ f: d6 P/ j( k/ S  h2 U$ zGetFullPathName
. @& T0 N- z$ \# j4 w获取文件路径,该函数获取文件的完整路径名。' B4 i+ x, y% z8 K3 Z: ]  g8 A
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。. G) t7 T. k- v: S' E9 a& t

* {; u1 W" W; t6 F- w9 DCopyFile   S  n" V' W% J
复制文件
6 R2 U- R% a" o  S- T7 k注意:只能复制文件,而不能复制目录
$ S6 u0 d  x1 O0 j; B5 g" B8 I# H% v
0 o9 ]+ V: c; b+ G5 I1 FMoveFileEx / q5 `8 T9 G0 I0 y" U
移动文件
* X# M& u* ]$ @$ v既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)$ E0 p5 L* h2 k& a! Q' q) h+ g
$ a$ b6 v, ~8 }5 b& w( R
DeleteFile
; v/ p( f5 d- r( K  m2 A+ b& u) \2 Q删除文件  Y) M7 u7 T: x* B6 a9 t9 B; T1 z
# M0 D* q0 E: e! ?2 y  M
GetTempPath
7 X5 i- a7 F9 V2 [* O0 D获取Windows临时目录路径
" G" J9 D5 D3 @0 e
! ^# L/ L0 X4 o0 gGetTempFileName   v  U; A: j# H6 O
在Windows临时目录路径下创建一个唯一的临时文件: s) A. _+ d. b: v. A( h0 B4 \
+ h9 J0 |& h) |: Z  k- \
SetFilePoint * c: }" n6 s4 w: d4 P. x
移动文件指针。
3 i! h* J* G% m! d# P% N2 D) Y8 F该函数用于对文件进行高级读写操作时。
; w% O  U7 Q) P1 S' t
% @3 E* `. U( T) S5 ~. c: Z" h8 s6 n. J$ v3 g5 F1 ~% a
文件的锁定和解锁
# ~* q' A$ N. q
, e# d. k3 ^$ X7 e  X  Y7 Z5 BLockFile
7 ~' W# R* y3 t" MUnlockFile / V, p7 z; `$ P% U8 P8 v
LockFileEx : z* E( d  R# }9 g: @
UnlockFileEx
) d% `$ T' ~, V0 d6 r8 q2 B! R/ ^) x
# O% T' {/ z4 f9 K4 C以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。( z* z8 ?9 c) O+ P; I' D$ }% r
9 \. h) V6 ?9 b4 A' G4 f
文件的压缩和解压缩8 g4 b  A  U3 `/ t5 k' S9 d

4 \9 ]9 D5 d( K) SLZOpenFile * i8 t6 E; e7 q  a9 \! g
打开压缩文件以读取
4 h, C, c& y4 W; j4 t3 \. H9 v( I& _* H
LZSeek
0 x. G: S2 k, q! f: q4 z查找压缩文件中的一个位置
' j0 P. }1 t* ~/ X
5 g9 D' F2 A. \- r& _$ BLZRead % N9 e- l) y7 U5 S0 i* Z
读一个压缩文件
, T+ [8 i, X4 ]- u- S0 e
" }+ {' m: A  w# }" q, n& ILZClose 6 H3 X6 b6 g& w
关闭一个压缩文件
8 r9 w' ]& J2 B; N8 E' a' B- x& X& l( z, Y4 M  Q0 [
LZCopy 4 @0 X% [' D+ k7 \1 y
复制压缩文件并在处理过程中展开
) l% w5 V3 @1 l
  ?) r2 k% |  x' B  j8 I+ ~: `GetExpandedName 5 Q7 ]; H* T4 i8 q9 g: p- ^. l, L! e
从压缩文件中返回文件名称。
$ q5 K2 h3 D0 F" E
1 l+ a+ h: {" P; w0 r以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
" x) h; j. |7 e4 c) l8 \5 @4 B" a4 C+ n. A; R3 p5 j
2 ?- e& Y6 |7 v  Z
文件内核对象/ R3 b6 B3 m  `. P6 P" ^6 K: p

( ^* {1 W4 u- v! f: d    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
$ N& V' R/ j* _; L2 o
$ V2 I9 u* H; L! r+ K; u. [CreateFileMapping 5 q/ L3 V5 h( K. g
创建和命名映射% C. `" V1 [- f2 a" x1 U
( M! `8 q# P- e& l
MapViewOfFile
7 _% i$ h' I) I, U0 |0 Y把文件映射装载如内存- o" Q! z% K7 B3 I5 A: l" V9 o
& j6 W) P( R  G, H$ u
UnmapViewOfFile " m- p. X6 f+ F+ i
释放视图并把变化写回文件. X. N2 L  ], w( M  b/ \

+ h  e  ?: U/ N2 h# Y4 G2 @FlushViewOfFile ' Y: S9 v$ ?) a: o4 r: J# h6 N
将视图的变化刷新写入磁盘
5 t5 M2 f& \. x" [! ~1 V' O, T6 |( X9 n, s# z4 Z# D, T: X
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-6-18 10:28 , Processed in 0.018948 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表