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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍8 W# y6 C, j7 y' H

5 Q; }& Z3 j& k3 D* F6 y' p) V) t+ Q# p6 j0 V+ |% }, }
作者:zhanglc+ q! H( y& d& H& H4 H" G; O3 M
5 b+ m" s. J0 L4 K/ C9 g0 u

, i2 J1 v3 I0 s+ |    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
' Q) e$ r5 h# i) U: G, F" F% W0 h2 {; R* ~/ N, I, K
一般文件操作 API1 W' L, [- \# `( o8 V8 e: R
/ {* ]7 J7 G1 N( g( b( H) @
CreateFile
$ q/ q* ]( ?3 }( c打开文件
9 h- i, s9 B# A7 u要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。) ~: q+ R; h/ a, ?5 x- L

( J" \  b$ p9 M) g% t# tReadFile
, q$ |$ s& Z# w' s! N从文件中读取字节信息。 / G+ ^* b- E- f. z- B$ z# i$ d; L
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。9 ?# e& |1 B, D( {* L
3 J$ x' P' b: P- f2 @+ F( I" P8 z
WriteFile
5 [2 O& E% Y' D7 J1 T) l' X向文件写入字节信息。 . }/ T9 z/ W* k7 G$ [( c( @; X
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。
2 k' K% t: M7 ^& {) Z+ v7 o
( u* z: A) a! w8 }CloseHandle ' Q5 W. P8 g* d2 W1 m% S4 D4 z
关闭文件句柄。
( S) F' D+ \& {+ n$ M打开门之后,自然要记得关上。% n7 `% p' L1 a

$ m% D# _+ X* G" n( [7 vGetFileTime 5 L7 a6 o, c0 d1 {$ k4 |! \
获取文件时间。
/ {& a& Y2 A' S有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 + w/ x! }9 g; \" D
该函数同样需要文件句柄作为入口参数。
( L" @  r8 t6 r. ~0 _8 V( R( e5 J) l$ ^3 G1 B( m: w9 ]" _$ G
GetFileSize ( Y3 Q% F1 h# A  m+ R
获取文件大小。
% U6 C0 K6 Q% o" [* H由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
( l5 O% K9 c: u3 B% L8 N" s该函数同样需要文件句柄作为入口参数。% M+ m- z/ w6 [2 d( w! t0 m

/ X3 k  A; k  K! @! v7 w, q* iGetFileAttributes 4 P; @& a, Q9 @$ V* [2 H
获取文件属性。 . w/ `: i' G4 b
可以获取文件的存档、只读、系统、隐藏等属性。
1 @& ^2 M. D! I! Q1 n  A该函数只需一个文件路径作为参数。6 T- E3 i  |. L+ m2 N( m

6 S6 s2 T7 ^# G. Q! ^SetFileAttributes
; `# t$ B/ k% }( k6 g0 c. E% b设置文件属性。
  f: R% X( H7 G& V- B能获取,自然也应该能设置。
, G% [5 k! B! B7 a' ~& a6 D可以设置文件的存档、只读、系统、隐藏等属性。
% X( f5 \: v" e+ D该函数只需一个文件路径作为参数。" o2 f; ?3 M7 ~2 \' {& S$ G

+ |3 u( Z! P6 aGetFileInformationByHandle * G) }6 ?, b  l. ~
获取所有文件信息
( c. O& j( v- w: {8 `3 a该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 , a7 G; a9 z# f4 m5 D7 k# Y  A
该函数需要文件句柄作为入口参数。
( b2 f+ D3 \' P3 I- W! Z" i# a* c% Z7 t2 \# b: S4 ^
GetFullPathName 0 h2 y, _. [7 w% O. N& _
获取文件路径,该函数获取文件的完整路径名。& ^" K0 P: H1 M  M7 F
需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
* n" s3 P* n6 F) H! V% k3 A& y- q8 Q) `& C
CopyFile / A$ p; p0 N2 L9 l- _: y- I
复制文件
. U* C7 O( E6 m* z- x3 W! ]4 \注意:只能复制文件,而不能复制目录: a- T* ?, y  m2 X- O! w: q
2 z2 ?, s# e( y5 y
MoveFileEx   x4 K! V! K+ s$ |
移动文件 ! w$ t$ k4 q1 [- e9 e
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)
) O" p, b( _: E, e+ b# [9 Q
; |& Y( ?. I  ^DeleteFile
" I1 n* R) N0 c- k& O$ c6 ^. m删除文件: f0 i+ C# F- W

. r( J/ s  v3 u+ V, [GetTempPath ) k+ [- b9 J- F2 j
获取Windows临时目录路径
; F2 i6 m, r5 D# o1 @
; [7 d4 u2 U5 H% h. U" X% W7 IGetTempFileName
- ~9 M6 a0 N* o, f! w在Windows临时目录路径下创建一个唯一的临时文件
+ Q+ Q; C$ V# L2 ?
- C. m% g" M8 x- G" uSetFilePoint
" v3 ?1 s! y/ m9 V4 u$ N% n& j) t移动文件指针。
" r% z5 c7 P. ]3 I" B. `该函数用于对文件进行高级读写操作时。0 V4 _, [0 U5 _: `; D1 n* D

' D; Q) T) K1 C' Y# A( R% c3 s! p: K& x( q8 l% |  M& ?
文件的锁定和解锁
& Z0 h! d6 R& ^  ?% K$ z
! k( T! Z6 m2 H! v9 hLockFile + t1 }/ g- E0 a/ L. [
UnlockFile
/ I9 j5 c2 Q9 B! ^' S9 W: |& E( aLockFileEx
( J3 b+ x' B" q! ]  a6 sUnlockFileEx ( y$ I: H0 b/ z8 @
+ t2 n6 G$ `0 b6 s. |2 Y( H
以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
" S/ ~0 N$ e2 `& n6 j) x
- ?4 n$ b) ^% @& t7 G 文件的压缩和解压缩: f/ A6 [. L) e

! V7 a! |' _# LLZOpenFile / a- d* g4 M+ i5 p# V8 B' ^8 T+ V
打开压缩文件以读取
9 x6 W3 W9 m9 G& i- G( D! N: f- ?0 K* n' t- `1 l2 l
LZSeek 4 T3 M; N* y+ m1 E
查找压缩文件中的一个位置8 N0 @, `3 q6 o5 N

2 c: S" t+ X: ^0 Y4 }LZRead * ~. f% M; R! R( W- Y' U, u
读一个压缩文件
) j) w6 r6 q2 K% f$ U; n
. Q( v) x6 @# |6 N" u6 R% G0 m" [LZClose
  X* A! r: C7 Q! |- A! C) Z" _关闭一个压缩文件
4 g7 ~3 L( M) `
2 s  l% w: x* ]) ELZCopy * ]# R+ ?3 {; `7 V. P
复制压缩文件并在处理过程中展开# m0 @) [% n; w' r  P) h5 H
9 ]/ k0 Y: `' G3 J& @0 [
GetExpandedName
/ D. m+ M, {0 }0 Q/ w从压缩文件中返回文件名称。
" ^* Z1 b/ F. ?- G4 u5 _- A
( R# S( K6 R) `9 B1 E) p以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
/ v* n% L  n/ V- f& L
" U/ b0 g8 x, D' f8 S7 l' [7 W' u8 z- l9 B
文件内核对象
& v- O$ n) F8 ~( V: A9 [& q" }
- R1 H, r8 E" n: o8 D8 L! b0 a; u    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
; V: O3 f7 D3 D- X3 g& d) Y3 z1 t+ i: R0 h2 n' I6 y# M
CreateFileMapping
/ c/ I2 b; y; X$ q3 W1 _创建和命名映射; i+ a8 }$ z5 M) [5 ~1 x" B

9 g* E: Z; M  }+ m4 d0 AMapViewOfFile ; Q, }; b+ g& c8 G& s  p7 P" C
把文件映射装载如内存
/ N$ D9 ^! C/ Z  M3 a9 D' E2 f$ Q1 o! V& ]
UnmapViewOfFile
( t3 L/ B$ A3 p( R* G0 ]释放视图并把变化写回文件9 o1 s2 j. l1 b! y% I8 V% a
1 }3 H6 }2 [9 {% H+ J; O
FlushViewOfFile
+ I, {9 o/ \- H8 _将视图的变化刷新写入磁盘
1 v0 y0 b1 A; O0 k' o( i! h' R. L. ^  q+ f2 k6 l, n* d
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 11:36 , Processed in 0.019836 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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