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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍
% F# T  o3 [  J2 e1 {( ^0 Q- g
  C, v1 I& ]% M; ?5 d; B3 T8 q) h' f  x" e  Y1 v) P
作者:zhanglc
* a( u2 r! s3 I; ]
; q9 @, l1 I) B+ Z
5 U: }" y6 Q; D( O( h    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:
& e. m! `7 S6 v+ q8 _' F7 C+ q$ s! r1 R# _- r* X: l( K
一般文件操作 API
! T7 y7 ?: y! D2 \) ~7 X5 P* b( B3 l5 S/ S' T8 P7 b  u
CreateFile' x  C, |! Z2 ?' N3 [
打开文件
: z, s: \# M1 \2 y/ R/ U要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。0 i! m% b8 S* C% ^  G) z

! [3 p; o  s5 w* TReadFile' m2 {7 l- F" @. }4 q4 }
从文件中读取字节信息。 & }2 y. q- N; W/ M5 G: S) l9 I
在打开文件获得了文件句柄之后,则可以通过该函数读取数据。
1 @  I' o8 a' n% B
$ P4 _2 m/ t" n5 \, k+ H* gWriteFile
% f! S; L( @/ I; C+ \, v3 d+ M向文件写入字节信息。 0 p( t% \. t) U
同样可以将文件句柄传给该函数,从而实现对文件数据的写入。) i" _3 L& v% @, S' [; |

/ \/ J! {/ y1 C8 b8 ?4 q; c7 {CloseHandle ! k2 X, N9 }- f3 X
关闭文件句柄。 7 A/ C8 A0 X; i2 _- C& p
打开门之后,自然要记得关上。
- }! j, ^1 `1 c0 c. ^
' W7 n8 b, ?' N0 Y8 FGetFileTime ; I& ^8 a/ k! y$ k, d% T
获取文件时间。 7 c/ _. V0 J9 B& }: }- D1 @
有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。 ! L1 |5 ?/ b  `
该函数同样需要文件句柄作为入口参数。
) [: I! N$ y$ D# U8 \* T
# l. b1 o% B- z% }; v% X7 D8 sGetFileSize
- s( v' m/ H2 d5 ], W8 a获取文件大小。 ) V% ^, y1 u2 P' q* g6 E& d
由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。 5 C- K/ q# W" Y. @0 p# [
该函数同样需要文件句柄作为入口参数。
; Q) b: i, p0 z- L+ D( Q. k3 l) N% G% b# [  S! V
GetFileAttributes & W) R7 M/ L/ w/ F
获取文件属性。
: _( l2 _5 ?% x4 _! Y  n2 X可以获取文件的存档、只读、系统、隐藏等属性。 8 c) k. `0 o. h0 w3 C  c: J
该函数只需一个文件路径作为参数。7 k3 u8 x* P7 t9 ]  T
: T: W# L  x' C4 r+ P
SetFileAttributes
5 j. ]1 `* I4 A8 q$ |* K设置文件属性。 % y) ?/ d0 F" ^) Y9 s
能获取,自然也应该能设置。 / F1 z4 J5 a0 h3 q: Z2 ^
可以设置文件的存档、只读、系统、隐藏等属性。 5 F# y# i% ]: C4 n
该函数只需一个文件路径作为参数。, r* o7 C/ _# t% r5 w
& X% _. t# ]. [  v0 }
GetFileInformationByHandle 2 b2 i- f8 @& ]3 y4 |
获取所有文件信息 . e" L+ a( `1 K' Y$ a4 M
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 % a; Q; Z; D% c) Q0 \. F
该函数需要文件句柄作为入口参数。
1 t5 S: O7 X3 j1 V* x, \, a' Z
  y2 p4 y5 e9 i3 BGetFullPathName
3 g( _& O+ M' ?# R3 F/ h& s获取文件路径,该函数获取文件的完整路径名。
$ ^8 I& S+ a' D+ W9 O1 h; E) g需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。
% D0 r+ v9 {6 D" B8 V/ d, {7 M3 ~  O" z
CopyFile 4 r( b+ Z2 H$ }  ^; S7 L# a! Y  F: L
复制文件 7 y$ @9 _  s% x
注意:只能复制文件,而不能复制目录' I1 s; E* J& I2 v- `6 T
: b' U# W3 Z- g, Y6 X2 ~+ e  U
MoveFileEx . k. H4 c9 U0 O4 K
移动文件 2 y, w5 f0 |  ^
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)- J; x& u/ ~4 k7 ~
/ w# \6 {  S! `: L& x
DeleteFile
3 f2 P( s# \0 R- c: J' |$ Y删除文件
/ }% d, |, j8 C8 Q/ z1 B; B& K! ?* q, V9 B3 o" ]
GetTempPath 9 N' O% ]6 b% M
获取Windows临时目录路径2 `# _+ k. |9 [

1 |7 \( d& e0 R& a* v& PGetTempFileName
. s5 J  W, n$ f2 f2 p* R6 y- c% E. z在Windows临时目录路径下创建一个唯一的临时文件6 R: M  U) d. }
" n7 o; Y# i9 |$ L, A8 R; Q$ C6 y
SetFilePoint - u) q& ?& n) Z) p" T, |$ [
移动文件指针。 ; y0 z0 M2 c+ ]. z
该函数用于对文件进行高级读写操作时。
8 r& i. C2 v+ C1 K: `: Z2 ~" c9 v7 _! {5 T7 _# }
& @% ]# O4 R' @) e% |9 f) h, ?
文件的锁定和解锁7 |, \$ s% g& O  h% _9 X3 d
3 ]+ A7 f/ r# B# o4 u. j
LockFile , f) D% e- D$ s
UnlockFile
4 e& Q6 ?8 a) a5 y3 MLockFileEx 9 _2 d- P1 h2 G8 S- ^; ~
UnlockFileEx ! P" G2 u0 m: D5 _4 J# v

9 ~; d$ s$ u- o以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。$ O" Y! H  |# S' x
) _( I9 z. B6 B; _4 z: Y% H
文件的压缩和解压缩
9 C! @% b! C! r5 y) a
- L8 d" k- L% X/ s' j3 wLZOpenFile
' O0 j+ z. ?/ o7 ^打开压缩文件以读取9 Z+ |7 ~0 m4 B0 O- f4 [! c
1 |% w8 s# ~  r0 D4 f
LZSeek
, d+ q5 c7 |: i( C查找压缩文件中的一个位置
+ E8 p0 d9 o" ?, z; c0 N7 E  C+ u, P7 J# I8 W  \
LZRead ' F9 o, R; i* q7 m+ x! V8 d3 b
读一个压缩文件
$ p5 s# p2 s7 Z8 h% C: |4 x
7 V7 F8 \. A0 A  QLZClose
3 e- Q  h2 U. i/ D' O- q9 N9 n6 Y' G关闭一个压缩文件, Z/ S7 h5 Q+ F% p* r0 V* D

2 A; D, U/ p/ N5 K4 qLZCopy . I5 O' M+ }8 Q. t* h2 f8 `+ H
复制压缩文件并在处理过程中展开( T# [1 n& O7 Y+ s- ?! R2 I  C
/ @, v9 E( r( N: y# W% D9 s& Z
GetExpandedName / n8 T& W7 U  K0 S. z
从压缩文件中返回文件名称。9 ]# b; e/ T0 ^
/ r' M8 \% a& H2 {2 ~/ n
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
+ D$ o9 B3 E% ^) ?) Q. C
" U1 p' D( ~9 T4 ]5 B2 P- L8 B3 N8 w9 c- s1 e2 B6 Q0 I
文件内核对象6 Z$ A7 ~, O% @( r5 c& z& i" l# d
7 B8 Q% \- w% S* r6 J5 h- V
    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。
0 ^! @0 m8 T/ O, n6 ]: h; Y* S- n1 T# |7 H$ O' w* {% x2 a
CreateFileMapping * v) }. i0 ^6 F
创建和命名映射) M+ S& Q6 X8 H; P* v" S

. t; W- ~: W6 o8 J2 d: MMapViewOfFile
' B* D& E/ U( G把文件映射装载如内存$ Z9 w# v. ]* ~/ I( B; }' x% x
1 ?) \1 n/ ?9 A$ {
UnmapViewOfFile + z0 k0 C; O$ S$ s9 J7 v4 W6 I8 V
释放视图并把变化写回文件
- s7 L! A. i) @* f' B
; g0 V# ^% D7 p" _9 z( ]+ mFlushViewOfFile
9 C# p( \6 `' h+ D" t- o7 ~* _将视图的变化刷新写入磁盘9 Q, O7 n7 L, \* r- t" j: H- D, X

9 w- }$ ?8 Q8 T, b希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 16:55 , Processed in 0.017001 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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