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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍
1 z! X( f% H8 [' S# y& _; D8 }: l& K9 G! [+ }, t. x

2 R# L0 ?$ ~/ p: O/ J2 O作者:zhanglc
5 W1 ?* z( ^! P( U7 \+ [: ^5 x% r! m8 q& k* G# w

; f5 D3 B) U* S, D) |    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
" [( R+ K- b- q3 _2 H) l" o0 V) _
& a' b8 u/ D; N1 \6 N 一般文件操作 API2 H( O: [# r- W8 x6 Y1 t4 ~( R

8 V/ [2 K, P( W" p, x) {% N% h+ hCreateFile( G& E! y' i8 v* W& c# g. f' ?
打开文件- S: d  d, R& B, F
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。! t. W0 c+ P% O! p  A
, W+ U: U2 T! g8 J& t- U! @! _: ]# ?
ReadFile# X; o/ p* [. O6 k1 a
从文件中读取字节信息。
- b* N# m5 X2 E% e% U7 h# i在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
/ u: I" I3 _" s  A
7 X5 ^: g9 |! Y. R( XWriteFile . A2 y% ]- W; _$ U+ ]4 v$ @9 U" _
向文件写入字节信息。 + x9 H) r2 B# P9 l1 v! O0 d
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。, V+ f  A; u& d4 R. ], N

& z7 z# Q7 F8 q# l1 WCloseHandle
+ e/ z% q* @. |关闭文件句柄。 # S& `* J2 P4 e* R) ?6 }
打开门之后,自然要记得关上。0 I4 F3 ^8 F, ~9 }/ N
) {: _+ R0 p% Z. I, g1 V  D# P" o
GetFileTime + V% ]2 ~' n$ [8 A4 @
获取文件时间。
5 {+ C+ L; j- \9 y有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。   ~5 D7 R) W7 `& }* P/ m6 Y
该函数同样需要文件句柄作为入口参数。9 X' b- ~/ q, X5 U  |) V0 }; Y# x

3 `! q* J" K& b7 x+ u9 N" q9 jGetFileSize
* U% o. n8 i" y* J获取文件大小。
" b/ }+ `7 M" @1 n( [. Q2 C由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
/ T& b4 G; l# T  ]; @* f该函数同样需要文件句柄作为入口参数。
) _# I/ Z- G$ f
9 r7 Y, g) v0 x$ }! x6 i6 BGetFileAttributes
: ?% w6 q" M1 |( J4 a5 e获取文件属性。
! M" N, X) ^8 v9 ?8 u$ e2 J1 @可以获取文件的存档、只读、系统、隐藏等属性。 5 E9 a# ^& j- ~( p+ |
该函数只需一个文件路径作为参数。+ J$ `) ~, t5 x8 `! |( `7 ?* Z

4 ~. G7 b3 d  V  ^  G/ SSetFileAttributes
6 n& \4 }; B1 u设置文件属性。 ; P( x# N+ r8 d4 L0 C( \' s6 B
能获取,自然也应该能设置。
( T$ C7 }8 O: Q5 O可以设置文件的存档、只读、系统、隐藏等属性。 % H+ u0 x$ T3 b3 k
该函数只需一个文件路径作为参数。7 F# u& ~1 o. R
( i+ u/ U! c0 I% s( U- k8 b0 n* ?% M
GetFileInformationByHandle # Y8 P/ x/ ]! F5 r2 g( B+ D# x
获取所有文件信息
8 w6 K4 l; e4 t该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。
3 }, y. T! ^, I. h8 D. i1 ^该函数需要文件句柄作为入口参数。
' J& Z) X; \' [8 [& ~+ b7 N% F; @' K7 G5 Z1 O0 b
GetFullPathName ! ]5 w3 ~! ?# E
获取文件路径,该函数获取文件的完整路径名。
$ h% M; i/ N9 O7 ]8 @4 N. I需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
% H- Z! h1 k/ {0 ^
; z( H; D9 N  T% }7 ~$ fCopyFile ) u2 f& {2 _5 K% j9 Q
复制文件   v8 \1 a7 w" k" ?# e
注意:只能复制文件,而不能复制目录$ K* y- E& c( i; S! q

8 m1 J; ]/ n: b6 N  `MoveFileEx
* u, n+ B# k- t) O移动文件 % n  T6 v4 O- ?( q) R4 l5 k# g2 ?
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)9 K7 G8 Q1 Y5 w- D! B
1 N  I8 F& O! S8 T4 F
DeleteFile 3 x' ^. Z3 e6 V, Y) ?7 @; u3 n- c
删除文件
# o7 N" v+ i7 \. a+ W6 O- k7 F% ^0 m
GetTempPath
6 A% @3 ?  z0 T6 l1 l/ I- W# W; x4 w获取Windows临时目录路径( ~8 H2 f% F5 O/ A5 A
1 g8 q2 k* g# M6 _+ h% D9 ?
GetTempFileName   w$ I" |$ C3 j% P4 v2 }
在Windows临时目录路径下创建一个唯一的临时文件7 @9 K" h. v; n- B+ ~: c$ z1 p

8 ~4 r, n: ^% k7 P; Z7 PSetFilePoint
. B  z1 a- d' H4 O8 P+ V$ ~% i移动文件指针。 6 J6 w6 d3 F. Y  v
该函数用于对文件进行高级读写操作时。
/ U; I7 A: r8 U/ U6 S! j2 k6 X6 @, A4 n; l; C' L+ I4 a! K8 P

' ?3 C2 o1 ~3 \- v. a 文件的锁定和解锁
, E) l8 B" L) u% K
! {  }, w- F6 L0 k5 L) t+ B7 e/ DLockFile
( a( c, B$ s) e- r  ]UnlockFile ! P6 b  |+ ^: ~$ N% J1 w
LockFileEx
& z6 k, g+ t5 q' v! Z9 N5 u; ^+ JUnlockFileEx 4 S. I4 k/ `; Y

# L8 W  K" X/ |以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。; N/ t) k8 k1 p

/ X& I9 S' {) R 文件的压缩和解压缩
+ W- X) {" p/ N; i, X
1 V, e; c  l& c1 b+ W& jLZOpenFile ) }+ Z: N1 I2 v# ^# I
打开压缩文件以读取  {4 w+ F4 i6 u- N+ F
; T- W0 N& r' R% ?# R: C/ j+ m9 O
LZSeek ! p5 E  T  P6 G* T4 [
查找压缩文件中的一个位置0 S) i& B/ T+ ~- u

) {) B0 D" x5 p. h: V; o+ i, j! yLZRead
0 p# H+ F8 ]- c& F6 E, H读一个压缩文件: s+ I8 |. x9 q2 S# z

* D/ l7 n. U/ t! t' W1 [0 cLZClose
5 g9 g' ?, O' u) F关闭一个压缩文件" S8 _/ \8 t$ W. z; @

  f+ `% L5 L+ sLZCopy
: J9 z$ ~& L) |/ S复制压缩文件并在处理过程中展开* k" e2 `9 T. R6 E8 I- `

7 R  h5 a2 E% E/ a" Y8 AGetExpandedName   e1 M$ K* S& k+ N
从压缩文件中返回文件名称。5 u1 y) d% U8 D7 d. ~9 a

+ d. G/ z8 I+ V+ A, h' x, o/ t2 p以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
# w! Y  D- V$ ?5 a7 X
; X4 ^, }' w: v5 E$ A# c  Z
2 x" o" E; i% k9 V 文件内核对象
! s2 L* c1 i3 }4 H" @6 j" w* q  f, S0 F( W+ p% o/ }, j3 e
    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。9 j+ K( R- o! x( E+ q% D* `
( `9 O& Y9 p1 K; i
CreateFileMapping 0 G$ n8 @' {: Y$ N( _
创建和命名映射$ a2 x' k$ ~, X# y1 O
- i  c( }- R) u1 L9 x5 b. o
MapViewOfFile ; C! i* I0 P; G. T8 k
把文件映射装载如内存
5 n0 X) o  l- l* f0 c
" a1 X2 ?+ H! y' F1 P% f" qUnmapViewOfFile 5 A2 p1 x7 e; A" @8 B$ K
释放视图并把变化写回文件. j# J3 p" {. d! ^/ z: D- }+ R7 G* @
9 b4 X/ v! R+ h8 h6 {
FlushViewOfFile
9 F: b" g) ~" R将视图的变化刷新写入磁盘
0 @5 {9 p0 y( L$ i" Y: u
" L' W3 u1 G- V% R' ^' ^; n6 v2 [- N希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 21:31 , Processed in 0.035846 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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