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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍
2 X* h9 O$ n+ b& B; ]5 [8 s4 W3 h! Q& j' ^
# r7 P; g/ a  L9 W
作者:zhanglc
- A  `( C2 L! Q" E/ {/ U
/ ^" h0 A) A5 h' Q+ ]5 |/ n* W* S$ E6 Z0 ]5 d1 M! v
    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:, g! O7 R( c1 _3 p
9 N5 _+ \  X1 r$ s# o6 d2 k: K
一般文件操作 API
" Q5 q1 T+ Z/ H3 @" L" M) _' q) ^8 Z6 N: ?7 F  _+ e
CreateFile
: v9 u+ P  ^0 Z" n2 W2 a打开文件. O6 q" Q- K  v- N5 k# A6 g
要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。/ ?8 e. [% F1 a- ^
0 A4 K0 C3 w; N0 M
ReadFile- u% [8 a- q# k0 N) E
从文件中读取字节信息。 8 Z. [& {" M+ E2 T0 t5 b
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
9 V4 V2 z4 X! L+ [: Z' Y4 j- q% ^- v
WriteFile
, q) f3 \) _& M8 d* [) T向文件写入字节信息。 % O& H7 X) W" p" y5 v& g- ]& _' |1 k
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。+ r0 M4 ?6 y6 K, j& G

& ]) m8 F* I6 DCloseHandle 5 w3 g7 Q, ~. p' |' }
关闭文件句柄。 0 ^2 A7 y$ T, f- v% x* q8 }6 _4 S9 {# q
打开门之后,自然要记得关上。
9 k( i1 y0 o3 Y' u4 M/ X9 T6 s$ \. X$ Z, m1 k
GetFileTime   C0 s) `- U5 a
获取文件时间。 ' j3 X8 W% Z; S/ d
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
2 W. |& i0 x5 w, T该函数同样需要文件句柄作为入口参数。! p; Y( P% B' Z. F) {$ K6 j/ B
/ n6 k, u4 i+ U, i
GetFileSize
  f# q! X. _4 ?& y6 L% M获取文件大小。
0 _. l, g. d, h" M0 K4 r由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 & _. _" t. A- q% C% B6 G' b
该函数同样需要文件句柄作为入口参数。& _' {6 U% g, u( I2 R

; d3 \, B1 K: n, g% tGetFileAttributes ; ]+ o: o" H' L- Z7 h9 x+ {
获取文件属性。 0 i5 F& \& \2 S+ g' [  N3 ]0 ]
可以获取文件的存档、只读、系统、隐藏等属性。
( F9 r6 N) {7 c  A* I/ h) M% s该函数只需一个文件路径作为参数。
9 {. V5 i9 W0 t7 X) ?- h3 J5 [. U% R" q. u8 j9 s( D) P
SetFileAttributes ( a, E. j- S- m! X3 y/ u% K3 Y
设置文件属性。 / l/ i; ?& ?2 }+ {3 a
能获取,自然也应该能设置。
8 w$ ]. Z$ g  p* |/ \7 {7 G可以设置文件的存档、只读、系统、隐藏等属性。
- W' X2 g( H; Q0 j  Y, Y0 a; {该函数只需一个文件路径作为参数。0 e2 D) K( L! P7 {& _

/ c3 q% A4 x, `GetFileInformationByHandle 1 [- G# c& n  X( b0 P
获取所有文件信息
+ S, Q- O& ~" o# J! d该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 8 Q: D; s7 s* e
该函数需要文件句柄作为入口参数。$ e* v3 `" P! C5 X; x3 M
, a( U/ A* g4 v. ]9 O, s4 C
GetFullPathName
( d2 S' H) n4 z/ h获取文件路径,该函数获取文件的完整路径名。
6 N0 o$ `& @) V  F* q& @需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
* H: E& [8 {" @9 Z
) V7 [$ j- v: n6 r6 U4 GCopyFile
3 R" z- g( ~& @. V9 q- k$ |0 A; A3 F复制文件 - e0 Z; u4 M7 {- w* v' r
注意:只能复制文件,而不能复制目录! h2 ]* H* v# I- n

) v% O% P; J0 ?- s. ZMoveFileEx % F- c. e2 ~: v& b  ?  b5 m
移动文件
1 `: m$ y* n3 @3 \8 D既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作): P6 t, y2 w5 p2 R  w* s, b

: E  U3 z! B1 EDeleteFile
9 t; \: @/ B( u4 B5 j6 |! S删除文件5 `: J- I2 l  A5 E, X; t  T4 L

. g. o5 {( ], c* U/ u% O; ^6 oGetTempPath
  P% c- x) I+ |, l3 J: i获取Windows临时目录路径, R: _5 U' k3 u0 ^( {& ]
4 a+ N- X5 G4 \' @
GetTempFileName ( r7 \( l. N3 j! Z4 B5 `- T
在Windows临时目录路径下创建一个唯一的临时文件
1 Y) m6 }5 T6 v" z" q( M
& U. B8 \6 E4 |9 K1 g9 @SetFilePoint # E# @) D" T! O# U' [5 A  y; n
移动文件指针。
' z, m' {% e0 X, P3 o4 W- T该函数用于对文件进行高级读写操作时。
1 v! u# k5 L* W8 O1 p. x4 z  d
: X: a( Q9 {4 Q! K/ \( F. {9 \0 [# e' _6 u2 ^. r8 ^3 [% U
文件的锁定和解锁' H9 y3 ?0 o9 o3 Y) E
' l# e* L) L$ N3 I( j
LockFile 7 x- ]) [5 s7 U' f% t1 N
UnlockFile 8 U6 ^- }. {% g/ A6 u
LockFileEx . X, E7 s( a7 X, k) x# W
UnlockFileEx
' r5 u9 E+ D" w9 O; u
3 B8 e& i! Y" \以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。  r7 @' e8 U( h& {
) k) u  E0 a$ P- m$ A
文件的压缩和解压缩4 H( r% R5 a% r6 p4 g0 F0 [

7 z( _. E- c$ J8 Y9 g* aLZOpenFile
+ U/ B( x% u" F+ E0 D打开压缩文件以读取
! I! _! `, ~' B4 v% m7 E
% N$ z$ H. X6 l1 x/ \; ]2 p! yLZSeek 0 R0 d4 G' Y9 s$ ]
查找压缩文件中的一个位置" H8 Z- B  d0 d
/ |, U- l) C& G5 l* J. C
LZRead
- N: d. M, k3 p' L+ u读一个压缩文件
. N) R: E& P: ^1 G* L: E! V9 I- h, |8 }  t- |
LZClose
9 V: `8 m' z2 R3 X8 z9 O2 F, R关闭一个压缩文件3 }! j" B. j$ ^, M& u0 P- Q
: [5 \2 W3 V4 `, q) y
LZCopy ' x5 j# H% E* f$ S; C# E) P
复制压缩文件并在处理过程中展开$ C) S2 `! u$ n# ^
  F7 q. N* g" p8 Q$ ^( H
GetExpandedName ! s  ^( [8 b" C" {
从压缩文件中返回文件名称。
) u# W- F5 q6 K  R$ @- k7 d+ C1 z5 `/ D1 o
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
& ?4 W, \0 ~3 U0 b6 n9 t: H& F. V! D
8 E1 P& l! e2 j6 n5 e6 w8 p9 t
8 Y5 L1 k- {0 [ 文件内核对象
" f6 K9 }4 B; \' `+ H1 Z  v8 P( t) a+ h8 @
    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
0 a0 y+ J. C8 b- J. n  y8 ^% K6 H% v% I. m1 G
CreateFileMapping
# I9 D" \7 p5 t) S2 T+ `% V创建和命名映射  e3 V" l$ I3 C) R
3 G% I- A) C: Z
MapViewOfFile 5 B/ i- z% `3 W( y+ t
把文件映射装载如内存
! z2 |6 W, C. G# e( v) X+ h, F4 r
UnmapViewOfFile
. c8 u/ ]2 q: w* a6 J释放视图并把变化写回文件
" j+ {9 w1 a8 ^
! }/ Q6 c/ _+ z+ V, |. CFlushViewOfFile 1 j: E, x5 b1 [; i9 `' S
将视图的变化刷新写入磁盘( ^# Q; `& `1 l( ]

2 `1 h. V6 T1 b( j希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-30 02:50 , Processed in 0.017809 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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