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

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

[复制链接]
发表于 2004-4-26 20:30:38 | 显示全部楼层 |阅读模式
文件操作 API 函数介绍4 n* b& N- L/ p
' [: N# |- s: Y9 k* }- t8 ^
8 }) x/ v4 p& X9 ]' Y
作者:zhanglc
; R6 c4 c, e' q  [/ z  F( X; E2 A( r1 D- u

6 D! m/ N( M- t* n5 f/ @( J. b    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍:% ^* q! u6 i1 A) e5 ?4 m) a  Y

4 I" y/ V2 v/ h- p1 J 一般文件操作 API
5 A4 U7 Z- n, j+ v
- H! K! R3 S. k6 |% a7 h1 `CreateFile
- h/ b9 ]. @# G6 S5 y打开文件
- c1 ?& z) f: X2 x要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。
* h3 H/ R- r' @- w  ^' ~* L4 x' c" X4 Z+ V, r3 P7 k
ReadFile& z, A. n3 D( S" |1 R/ u  R7 u
从文件中读取字节信息。
' ~3 {7 w1 v+ ^在打开文件获得了文件句柄之后,则可以通过该函数读取数据。% }) D* A+ m* w$ S
! D) _2 H0 M  e0 e' c8 g4 m
WriteFile
5 T, b! u+ y8 a$ B向文件写入字节信息。
1 N1 Z7 {+ f2 i( h. }' s, P# A同样可以将文件句柄传给该函数,从而实现对文件数据的写入。* E3 P, X- q3 ~3 x5 d0 T* y

: z3 f7 e6 o: @3 d1 [$ f5 BCloseHandle
3 s; I$ @) J/ u1 x& j- |; N关闭文件句柄。 : Z* F4 K9 r, N' v2 s
打开门之后,自然要记得关上。
# d" m( D  w- E2 T* [; N
# _8 [& L$ I& N; w4 D' \GetFileTime
/ w6 N+ e; c4 j+ j$ ^获取文件时间。
' f9 f% ?# O+ \, @7 A2 R* J有三个文件时间可供获取:创建时间、最后访问时间、最后写时间。
4 F4 `% a: j! F4 I$ S; w# G; e6 I( u该函数同样需要文件句柄作为入口参数。+ m0 G5 r! K( h2 g' q! Z

' K5 }. a, y- y- l, K" Z* Q, u4 xGetFileSize ; ~8 ?+ o5 j  c  ]: [5 f8 H3 J+ h8 g
获取文件大小。
( y" V8 I1 `+ q由于文件大小可以高达上数G(1G需要30位),因此一个32位的双字节类型无法对其精确表达,因此返回码表示低32位,还有一个出口参数可以传出高32位。
& h0 y* x/ t# t: c& n3 i该函数同样需要文件句柄作为入口参数。/ H/ e. M8 [6 Z! N! L! e
8 \" Q* A) {9 [1 Q
GetFileAttributes
) w7 _5 k" _) N8 l# y0 b获取文件属性。 / \; g. A* ^! [4 e
可以获取文件的存档、只读、系统、隐藏等属性。
3 f3 |: Q$ z  z该函数只需一个文件路径作为参数。
7 x0 i, }9 f: X7 g: \
) U9 }5 i9 |' m6 n+ OSetFileAttributes 6 d4 p$ m; d+ ], R7 g" @, r, h& D6 Z
设置文件属性。 3 U% K: R# A, J) l
能获取,自然也应该能设置。
- W" Q( {  u% v; F可以设置文件的存档、只读、系统、隐藏等属性。 4 [7 I  D; {& Q, p
该函数只需一个文件路径作为参数。
! b' u# Y2 M- }. P. R, |
  d3 A: H$ s# Y) ZGetFileInformationByHandle
/ y4 A4 Y& s& _7 {) V2 ]) `  y# y获取所有文件信息 " v2 t/ f* H( n" b. |
该函数能够获取上面所有函数所能够获取的信息,如大小、属性等,同时还包括一些其他地方无法获取的信息,比如:文件卷标、索引和链接信息。 # k# n+ i0 g( p& L3 z, L  w
该函数需要文件句柄作为入口参数。# W, g& I/ B# [6 G; ?: n" h

. s3 a- \0 g2 N/ v& _GetFullPathName
6 R$ _( I7 z5 t+ {; K9 Y* ~获取文件路径,该函数获取文件的完整路径名。
. L" `$ d! s( i" l! D/ W* L需要提醒的是:只有当该文件在当前目录下,结果才正确。如果要得到真正的路径。应该用GetModuleFileName函数。( z" o9 a. ?7 W8 H2 c5 T
* a) t% X5 Z" p2 l- x. _0 \5 L. p/ o
CopyFile
3 i) g) o( J/ A2 i) l复制文件 3 i# B, {0 y2 H  _3 s. Y1 Z6 g$ u' M
注意:只能复制文件,而不能复制目录
2 J# M* k, h* o+ |  m& G3 x8 @1 p4 h" i
MoveFileEx 0 v+ R) `, `/ ?9 V- x0 V" |
移动文件 ( }1 A6 ]& {& h6 H" t# q% i
既可以移动文件,也可以移动目录,但不能跨越盘符。(Window2000下设置移动标志可以实现跨越盘符操作)$ a! G6 @5 T7 ]+ q) w. F0 C$ ~, W
3 J: r2 R% V# [
DeleteFile 2 `! m9 q* m# ?* R/ S4 K
删除文件+ m, ]( s) B2 W' a  y9 h5 z
' z2 r- Y3 P* [- i' }
GetTempPath
7 P9 w" z5 E( o5 {6 o8 I4 ]& U获取Windows临时目录路径6 k0 a8 u; T$ L' b

  x( c0 l/ I/ ]% B+ TGetTempFileName 6 b! {" t0 R+ P, ]5 \; W# T: |' j
在Windows临时目录路径下创建一个唯一的临时文件- X2 |2 _% k5 X$ H3 E+ l8 \# }

* L0 T6 j! K9 x& ~4 m% sSetFilePoint
; l$ E2 t" {* m+ T( M移动文件指针。
# n/ C2 S/ c/ O( ]9 u该函数用于对文件进行高级读写操作时。5 R- s# l' E( Z, W

0 v  m1 O! j7 o
6 s1 T3 h* E2 r: X5 N! b! m  d, J 文件的锁定和解锁. Q6 l3 ~& k1 a7 G

8 a+ |0 l+ T* x5 @- ^& B" NLockFile ' a( B! Z. S, r7 c1 I
UnlockFile
5 H( d+ x7 I4 C) Q, yLockFileEx 8 v& ~2 ]6 t# m
UnlockFileEx
) I2 d4 M9 F# W& G3 U6 m
7 v# j' e* L* e% q' x% R8 A以上四个函数用于对文件进行锁定和解锁。这样可以实现文件的异步操作。可同时对文件的不同部分进行各自的操作。
0 e4 r& M. o0 Y, e+ Y% R9 T+ l# U7 j, L7 v! y$ u; P3 [
文件的压缩和解压缩
" y3 J: G' n+ c; [1 z" {. x% i1 N
6 W- T% S$ H" H. JLZOpenFile & u# h% z- \( V/ k& n
打开压缩文件以读取; Y0 U6 M8 T4 H1 w  Y$ B7 {

5 u0 Q4 z9 S3 Z; g# YLZSeek ! M2 M2 {6 `. i
查找压缩文件中的一个位置7 N: h# ]$ G0 }; q: X) N* J$ ]7 K
; M* B' E: G0 f6 R9 w7 S# n) U; h
LZRead
# b" }( Q: Z+ q) y* L+ G读一个压缩文件9 s9 ?2 e5 `8 E5 W$ n
  x* x2 j9 D8 L% d6 ^0 W+ r9 j" r
LZClose
( f+ ~- v% F% U0 |# U. R关闭一个压缩文件
7 S7 d$ y' N: n, C7 P& j
  g5 b5 C+ ^- l: G7 D8 rLZCopy - Z% ^" _6 I- E
复制压缩文件并在处理过程中展开7 n# a$ c* w/ f- J; x' Z( j) i+ [1 w2 R

5 M1 U: S  |8 s2 Q. SGetExpandedName   C" Y8 Y1 S6 f# ^$ O+ I
从压缩文件中返回文件名称。( v9 {* J; O) p# e/ T
1 ~7 q# t/ H6 J# W2 p! A# Y# _
以上六个函数为32位 API 中的一个小扩展库,文件压缩扩展库中的函数。文件压缩可以用命令 compress 创建。
' p7 F; Y( Q' _9 |/ {
. n6 O; b5 n1 t7 B) c1 a1 o. {  i3 v" c7 [7 g
文件内核对象
: {" J9 _, u& f0 @. o& \* Q7 `2 z- R, I5 ?5 f! D
    32位 API 提供一个称为文件映像的特性,它允许将文件直接映射为一个应用的虚拟内存空间,这一技术可用于简化和加速文件访问。$ p2 p! H5 G! D1 m! J$ }
) a  k% i5 Q1 A  N1 d3 \0 \7 K2 e
CreateFileMapping 7 k! J" P3 O3 E  W
创建和命名映射
2 Q: C9 I+ c" ?5 Q6 `2 a0 C& z) j
$ u6 Q) J; e8 r; [MapViewOfFile
- x, X/ _  m& H: T把文件映射装载如内存- Y; P& X4 B' H4 C9 _, G

+ p6 j0 [6 r8 R' v8 yUnmapViewOfFile
& l4 A' f5 t) K释放视图并把变化写回文件# b. @9 j. w1 B) l; J. H! g
. L6 `0 }0 {* D+ h
FlushViewOfFile 3 R0 T# N" k; A. E- d
将视图的变化刷新写入磁盘, j8 m1 G1 ~; O8 ~. y
4 X6 F4 Q9 N1 ]/ }' \8 p2 U
希望通过以上几个常用的 API 函数,能快速的提高文件操作过程函数的编写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 07:00 , Processed in 0.034599 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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