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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍& v3 Y* n$ a) C9 ~( {- T0 `. V
0 K! U8 \  Q& {3 v
( L- Q3 X: @4 @9 K
作者:zhanglc1 S* Q: a% B3 Q4 d

4 Q' H5 j9 Q- l! t) e
1 k9 }6 C  q# Z+ Q# t3 g$ l    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
, m! L3 p8 }6 F3 Q) L, r
' ?  D& p) x7 h9 z- d( l 一般文件操作 API' D2 a, {: ~  u7 {# V. [& L
1 g" C' S4 c! I" R7 b' U
CreateFile
' }/ b7 O2 P  Y3 l6 i打开文件
6 `3 f0 n7 Y2 D. @要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
" p  \+ q: U' T
7 O9 n( O; {" Q/ X( CReadFile: R& O* K- |- X) E% N
从文件中读取字节信息。
: d: b# Y0 Z6 v& T8 p: K在打开文件获得了文件句柄之后,则可以通过该函数读取数据。3 u0 h. d7 P9 h7 E- m, ?/ B
4 Q/ j8 t+ Y+ ~; S/ G, I
WriteFile
8 |% x( d$ k1 j2 [# ~9 c向文件写入字节信息。 ( V: `' M% n- [+ s- K2 T! a7 w
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。' O* e& x/ u: a1 Y! B

1 n( V  o3 |: ^5 S! b4 _4 E7 v) kCloseHandle 8 y8 X; X& \+ x% [
关闭文件句柄。
9 d+ o7 Y$ _, {! G打开门之后,自然要记得关上。: C& a% P! k/ |# j

1 H# n: @0 c" y( B% d5 E9 d/ AGetFileTime 2 P( K; L7 h1 j5 I3 u. P
获取文件时间。
* x& n6 E) z. W+ S2 y3 b# y有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 + N1 v6 z( w5 Y) e9 t  _' h# t7 x$ z
该函数同样需要文件句柄作为入口参数。
7 e. C6 \7 d+ S
( Z2 a# c* b5 ?$ o" N5 p! JGetFileSize ( D2 Z! \/ V5 l3 i, m
获取文件大小。 , n" P* N2 U8 Y6 V) [$ E
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 " p, D3 G; n9 L7 e, q) K
该函数同样需要文件句柄作为入口参数。
4 I+ `. j( j7 M, v5 U
' n' H4 @% ~6 v1 |/ O% cGetFileAttributes ! J, Z$ t9 b8 v" J) }, W) J
获取文件属性。
" f1 j; s( u2 e3 E2 d4 e# Z* l可以获取文件的存档、只读、系统、隐藏等属性。
, e" N1 b- u- C4 `该函数只需一个文件路径作为参数。0 k1 l- L, b6 M5 T, B, }' v
: k, U$ j1 n, m  ^8 m' y3 L+ l+ u7 F, X
SetFileAttributes - d# [. Y& T% l. N$ ^
设置文件属性。 ! x+ ~. G! I+ \; `' b4 F
能获取,自然也应该能设置。 ) t  h1 w/ E8 i) ^+ i6 u% U
可以设置文件的存档、只读、系统、隐藏等属性。
/ X" `+ w) E. u) j- ]: w该函数只需一个文件路径作为参数。( M$ k6 g  {' B5 k" c& g0 L6 H
% o" s  J9 U& r$ n. G0 Q0 L% B
GetFileInformationByHandle 7 W: e9 _& b0 Y) |
获取所有文件信息
2 l3 P# p& E8 r  H' T+ n3 k该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 : k1 A7 E& I9 D: p' l% ], e
该函数需要文件句柄作为入口参数。# r* {6 [. t) o2 ~! M  |

4 T& X$ @' W- g5 O5 wGetFullPathName ) t/ E  ?4 L" i$ @9 N
获取文件路径,该函数获取文件的完整路径名。
' h, s6 Q' y  f' s+ A( k1 X需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。9 C  n  A- s, n  g+ P7 \

; N3 f! r7 t. H  c0 ZCopyFile * }/ _1 {% n7 y8 Y9 K. @9 ^" b
复制文件 8 k: O# X6 T" P  d: `! _" r
注意:只能复制文件,而不能复制目录) x2 ?2 h& }; b1 K

& M3 q0 y9 j# F" mMoveFileEx
: j3 G0 ^8 F* Y移动文件 4 q! c7 y& j+ j6 d! G& Z
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
8 D+ ^1 t/ _' B: p2 C
, S" t8 a$ E2 SDeleteFile . D$ g- @' M& p
删除文件
2 u# H$ X6 q1 l2 {' q/ U* u/ |
& v/ S! _! g( ]GetTempPath 3 o: E1 I, O/ p+ e4 @
获取Windows临时目录路径
% K* D5 b* P+ D: |/ s6 G5 A0 k3 u2 o1 n2 o
GetTempFileName . f  Q4 }& Q+ r* `  s! `4 s8 h; @
在Windows临时目录路径下创建一个唯一的临时文件
! i' ?0 A% G9 e. ]: S! X
, |. G( L4 g) D& T* x* ?# sSetFilePoint
* Q! c1 ^" e/ U# G" G" \8 w移动文件指针。
% J" z5 A; A  D- `该函数用于对文件进行高级读写操作时。* E* U3 ~/ K+ ~$ g4 S+ ?

! x- Y& j% a) L  K) g$ j  Y" ~( M4 h6 q0 ~: \" K
文件的锁定和解锁
) B8 y4 |* s2 `3 Z' i  N5 ~7 v
6 M* ?( ~$ R# w- F) P6 Z4 T7 bLockFile 7 Z" d, f6 d' ]# B4 m" ]
UnlockFile 9 e0 m8 m8 g3 i3 r4 `* S9 H
LockFileEx ! H7 }% y, |) ^3 I: b9 V' T& @
UnlockFileEx ' u/ O$ i5 J1 d1 p5 d
8 a6 {) @* \2 Z4 e$ M( U: w& p/ S- ?
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。3 \8 D0 x7 Z4 r1 b

6 p$ Y) u5 m9 S( j 文件的压缩和解压缩
! k4 r2 V/ j7 m( ]  m
& [* U' _4 h* i) xLZOpenFile
( t* `8 Q6 I6 _* l7 g  R打开压缩文件以读取7 T; v; g  {8 u. N. f' i8 }2 ~8 a

, b. f0 p9 n4 W" M+ d; \LZSeek 3 x* J1 m% G' J5 Q; ?- s' h0 ]
查找压缩文件中的一个位置2 J& T# a- I$ R' Y- V1 `
2 D4 _5 S; P- ]6 {9 p7 G
LZRead ' |' J2 s/ U- A
读一个压缩文件7 Z3 ?4 Y$ @% z; M6 p4 [" V7 h
7 K! {1 M. X( Z
LZClose # ]/ x& s, r; Z6 d
关闭一个压缩文件# n% |: U; J2 S, N5 v' a* _

* m$ ^: P  d' n) `; o. |1 ?$ ZLZCopy
+ `1 h" [3 X, L, ]复制压缩文件并在处理过程中展开
4 O7 |1 L) y3 {8 Z, o6 `$ S9 z# o  r1 t% x  t
GetExpandedName
3 c. C/ S0 U1 Q/ Y; t- c从压缩文件中返回文件名称。
% o. a* M; R7 H/ b1 V3 {1 V7 ]$ V5 e' y
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。$ G7 T  H0 E2 s% s& R0 a
& {' X+ U  n( c

7 i* A9 H0 Z/ @: m% X 文件内核对象
. e$ ~& n  R1 N$ L: `) P/ m
& u( U5 m: z0 n    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
  b( o6 Y$ }% [; N! m0 y) B$ q; i8 Y$ H4 q
CreateFileMapping
! L$ ?+ g5 D- i6 U3 T创建和命名映射  _3 ]7 z: a: E# r8 @; k- g( Z- v
& T) x/ }* h- d3 m+ e, q- X" W, m0 m; t
MapViewOfFile 5 z6 z9 y0 C/ t6 P# `+ T
把文件映射装载如内存( q% X* ^, \/ p- Z# z/ L# [* b; \

, }" s. L( C+ Y, _0 h; }" W- gUnmapViewOfFile 6 n+ S# C( ^9 m) |  D! ~" b# t' f- k- u8 S
释放视图并把变化写回文件
% ~( O. y2 I5 a2 O' k. m8 D- f) U- H) f9 {' }3 t
FlushViewOfFile
) d2 k. O' W/ i& F8 n6 B5 I! S将视图的变化刷新写入磁盘
( y" p) I3 ]( j; E$ t3 C2 d/ s
$ j5 }, h; C- ~0 M6 O5 W  ]  c8 {希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:50 , Processed in 0.018236 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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