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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍
: I7 q, i; l1 y) Q9 I: }" r, y* m) }+ Q, e/ k9 Z

+ A# E( R+ e* y, M" L5 I. A, M作者:zhanglc3 \  }4 j+ t1 e1 H: T

2 P6 u1 {4 o9 s: x( F; m$ X3 z
# a8 v8 @8 E1 a0 p, z: ^, G    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
- }( E. K" u- r+ |' K8 ~4 Y! N! B! {4 t" G* {, l& ~
一般文件操作 API% L# Y% I* b( B& }" ^+ P8 T/ d' I
  \! W5 a/ U2 {8 \- W. q
CreateFile
. x/ `- i  r. d2 {* v2 j打开文件
6 x& k6 Y6 Q- l$ |) [7 b* c+ B- K1 X要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
( u+ v. ?( i6 c% V  e# A7 Y- d+ o9 }" y8 w
ReadFile$ w6 l& W  W+ r; A" e
从文件中读取字节信息。 ) u/ C* G8 i& w$ d1 }
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
' d+ L: \- i5 W% |7 G  W5 L
5 {& d& _1 \* v# Y2 }1 gWriteFile $ T( b" G* s. |/ b, h! T( p
向文件写入字节信息。 * k! _0 A4 m+ ^: N! n6 Y7 R
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
, i3 K! x- b5 K* G, H) v4 T+ Y2 b
4 S/ j' D, n6 D! m# K/ ]7 i+ R4 UCloseHandle
2 _- J7 L2 C9 a7 v关闭文件句柄。
( U4 o+ f4 s: n! U; ^' o$ n0 F: u打开门之后,自然要记得关上。- Y# t9 }3 o$ o+ y, b  p

1 a; \) R& I# c& i; D4 `GetFileTime 1 `; Z9 C0 u* J9 A  b) |
获取文件时间。
0 b& s1 p- ^" C有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
3 }" ^% s) S# U1 R2 v该函数同样需要文件句柄作为入口参数。
. A* r' {2 g* u! v5 h
5 }' e+ A4 h% Z7 n( vGetFileSize
9 m' M/ y4 l; V+ N/ |1 X: y6 K获取文件大小。
: x0 l# e$ }6 w( U由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
$ S* s6 h4 d6 s. D该函数同样需要文件句柄作为入口参数。' z  i" ?# ~+ a" g4 F) v' ~
* H, z" [7 K+ @; c( ?
GetFileAttributes 6 E9 m0 w6 l6 V% |
获取文件属性。
/ q7 @* X/ ?1 P  Y& k可以获取文件的存档、只读、系统、隐藏等属性。
' d+ N; `. [2 i( C# [: A% N该函数只需一个文件路径作为参数。
2 E' x; ^7 @( |4 M. C0 j4 @0 P3 k, B1 T" L% K+ D- R/ e
SetFileAttributes : n% g1 Z( Q3 P
设置文件属性。 $ S+ [& C9 j  m  g% D' R
能获取,自然也应该能设置。
; L( w3 z9 Z- [  m% h! B+ Q0 C: F可以设置文件的存档、只读、系统、隐藏等属性。
% |& r. s4 Z! W8 _+ v该函数只需一个文件路径作为参数。
# K/ x9 I" U, R8 O! I. x0 E
) r( n' B- u. A- KGetFileInformationByHandle
4 S; m" M' K7 Y# g8 L获取所有文件信息
; U4 R+ X6 L5 e% d) T! X2 k) P该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 ' E/ m4 A3 D& j; {
该函数需要文件句柄作为入口参数。
4 b- R( S% `0 `
% g1 o$ x9 l" j4 Y1 d" UGetFullPathName
9 [2 Z4 a$ e+ Y& h获取文件路径,该函数获取文件的完整路径名。0 ?! t7 V# m( G% m: K& M0 P
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
3 U# s0 U$ K1 }: c
1 w/ ]( N" @2 ECopyFile 8 q, Q$ y9 I7 l: q0 `6 y4 C- {, V& w
复制文件 4 l6 p' X9 v: [7 a7 q; B
注意:只能复制文件,而不能复制目录" m, [3 N+ p- {6 S4 w) I

- R5 Z% L8 o4 c2 V) C$ `MoveFileEx % G; o; r6 j  w
移动文件 & J$ N5 q9 o, W* m& F  a, I
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
7 a' ?: H- K, v
6 ?; {9 `+ C: n$ ]7 VDeleteFile
/ x9 |, N. I, g删除文件
" I" s' q" S0 {& o5 W
/ C0 j: v1 x% D! q& g8 N, wGetTempPath
7 F9 A$ c* u7 I获取Windows临时目录路径# E: M; w+ e% f7 `) S! t

1 o. W& o# K1 d( [# K2 Q/ r/ e7 OGetTempFileName 8 m  U- L$ m9 L0 J. t( y0 K: F
在Windows临时目录路径下创建一个唯一的临时文件8 K# r. O7 ]( g: q" i6 y
. T0 ?% o0 u4 H) B" y
SetFilePoint
" ^; i6 ~1 z3 C5 ^. _移动文件指针。 0 v, S2 P6 N7 x6 @9 m0 R
该函数用于对文件进行高级读写操作时。5 k! \2 L/ i5 f
$ h5 \9 M$ ~6 k! ~$ S
5 K: D5 m: v% f0 g) O% [
文件的锁定和解锁, h% f4 A; I! _7 _; Z

, i9 n3 k* C& S5 }LockFile
9 Q; [3 T1 j' l7 eUnlockFile
/ C% L, I* o# YLockFileEx ! X" ~4 i' Z  I5 n: F, z/ z
UnlockFileEx
* c$ P  x5 D+ c+ z4 h* K3 J' O) }
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
+ E" d8 r& v& z& g( f# y3 K9 D& q2 c  A8 w
文件的压缩和解压缩
  U. T: _3 n6 N, e
# _3 H: S- ]! u/ A4 f$ \1 v, jLZOpenFile
% O+ W6 I$ o+ L! O2 O2 o( v打开压缩文件以读取
6 O/ Q/ U* d1 o8 J, F
- R" h  J0 i5 r6 SLZSeek 7 _6 E8 C5 v! h  u, C" {
查找压缩文件中的一个位置
$ L! c4 X' S) e+ h! ]
6 ^0 B) W7 Q6 K0 ^9 a, }LZRead
3 ]6 w% E6 v) @* l读一个压缩文件
) X! m; }, U0 p, K7 y
+ I3 o' ^) N: N% pLZClose
8 A8 @) ]0 b  [关闭一个压缩文件
# B) G1 q2 Q9 Z9 H: J( ]  d
! z4 z8 w- W. q. C& qLZCopy
4 |9 u5 \3 F- L: {复制压缩文件并在处理过程中展开
- v" F- t8 f' }9 b: |$ b( Y# h" s/ P
GetExpandedName
8 F4 e2 s& v9 ]5 n( o7 p从压缩文件中返回文件名称。2 j$ z, y. A, o* D4 q/ R2 E

; Z1 F: D. O0 ], y( d. p& l以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。8 F( d6 K# @5 C. y2 \. y3 h! ]
+ F+ E. U8 x$ A- X% X8 m" h

# M- R4 a: \- t2 T! } 文件内核对象" w4 E7 C2 `5 Z* L2 G

8 W. e  L4 b+ X0 {4 O' k' A0 N6 e    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
/ F4 z5 C" U8 U0 f! _( c. i& M4 v
CreateFileMapping
, P- P+ m' \! w, h4 ^- M) U! T. S" m创建和命名映射8 S% ~5 P' I3 @4 _6 s) j/ y0 z
) F6 I: r. a/ }) i* I' P
MapViewOfFile   G; P, I9 x6 v
把文件映射装载如内存
# L7 `" f; p7 q$ c2 F; H- @+ D; c  P4 M: w% n% i
UnmapViewOfFile
9 f6 S( ^5 ^& m3 J" |释放视图并把变化写回文件4 B! r4 B0 S  O  a5 N8 s7 r, `2 |
9 x$ T; Y* O8 S4 t
FlushViewOfFile
8 Z! }* t* a9 ~9 r/ B将视图的变化刷新写入磁盘
- e& [4 f( i! I
" x' ^9 k1 ^: B+ }; P: |7 }8 T希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 14:35 , Processed in 0.016574 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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