旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

基于C的文件操纵 (FILE*、fstream、windowsAPI )【C#.Net教程】,C/C++文件读写

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:93评论:0


导读:基于C的文件支配在ANSIC中,对文件的支配分为两种体式格局,即流式文件支配和I/O文件支配,下面就离别引见之。一、流式文件支配这类体式格局的文件支配有一个重要的组...

基于C的文件支配

在ANSI C中,对文件的支配分为两种体式格局,即流式文件支配和I/O文件支配,下面就离别引见之。

一、流式文件支配

这类体式格局的文件支配有一个重要的组织FILE,FILE在头文件stdio.h中定义以下:

typedef struct {int level;unsigned flags;char fd;unsigned char hold;int bsize;unsigned char _FAR *buffer;unsigned char _FAR *curp;unsigned istemp;short token;
} FILE;

FILE这个组织包括了文件支配的基本属性,对文件的支配都要经由过程这个组织的指针来举行,此种文件支配经常运用的函数见下表 函数 功用
fopen() 翻开流
fclose() 封闭流
fputc() 写一个字符到流中
fgetc() 从流中读一个字符
fseek() 在流中定位到指定的字符
fputs() 写字符串到流
fgets() 从流中读一行或指定个字符
fprintf() 按花样输出到流
fscanf() 从流中按花样读取
feof() 抵达文件尾时返回真值
ferror() 发作毛病时返回其值
rewind() 复位文件定位器到文件最先处
remove() 删除文件
fread() 从流中读指定个数的字符
fwrite() 向流中写指定个数的字符
tmpfile() 生成一个暂时文件流
tmpnam() 生成一个唯一的文件名

下面就引见一下这些函数

1.fopen()
fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen完成三个功用

为运用而翻开一个流
把一个文件和此流相衔接
给此流返回一个FILR指针
参数filename指向要翻开的文件名,mode示意翻开状况的字符串,其取值以下表

字符串 寄义
r 翻开只读文件,该文件必需存在。
  r+ 翻开可读写的文件,该文件必需存在。
  rb+ 读写翻开一个二进制文件,只许可读写数据。
  rt+ 读写翻开一个文本文件,许可读和写。
  w 翻开只写文件,若文件存在则文件长度清为0,即该文件内容会消逝。若文件不存在则竖立该文件。
  w+ 翻开可读写文件,若文件存在则文件长度清为零,即该文件内容会消逝。若文件不存在则竖立该文件。
  a 以附加的体式格局翻开只写文件。若文件不存在,则会竖立该文件,假如文件存在,写入的数据会被加到文件尾,即文件本来的内容会被保留。(EOF符保留)
  a+ 以附加体式格局翻开可读写的文件。若文件不存在,则会竖立该文件,假如文件存在,写入的数据会被加到文件尾后,即文件本来的内容会被保留。 (本来的EOF符不保留)
  wb 只写翻开或新建一个二进制文件;只许可写数据。
  wb+ 读写翻开或竖立一个二进制文件,许可读和写。
  wt+ 读写翻开或着竖立一个文本文件;许可读写。
  at+ 读写翻开一个文本文件,许可读或在文本末追加数据。
  ab+ 读写翻开一个二进制文件,许可读或在文件末追加数据。

一个文件可以以文本情势或二进制情势翻开,这两种的区分是:在文本情势中回车被当做一个字符’\n’,而二进制情势以为它是两个字符0x0D, 0x0A;假如在文件中读到0x1B,文本情势会以为这是文件完毕符,也就是二进制模子不会对文件举行处置惩罚,而文本体式格局会按肯定的体式格局对数据作响应的转 换。

体系默许的是以文本情势翻开,可以修正悉数变量_fmode的值来修正这个设置,比方_fmode=O_TEXT;就设置默许翻开体式格局为文本情势;而_fmode=O_BINARY;则设置默许翻开体式格局是二进制情势。

此函数返回一个FILE指针,所以申明一个FILE指针后不必初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,假如成败,返回NULL。

例:

FILE *fp;
if(fp=fopen(“123.456”,”wb”))
puts(“翻开文件胜利”);
else
puts(“翻开文件成败”);

2.fclose()
fclose()的功用就是封闭用fopen()翻开的文件,其原型是:int fclose(FILE *fp);假如胜利,返回0,失利返回EOF。

在顺序完毕时肯定要记得封闭翻开的文件,不然可以会形成数据丧失的状况,我之前就经常犯如许的缺点。

例:fclose(fp);

3.fputc()
向流写一个字符,原型是int fputc(int c, FILE *stream); 胜利返回这个字符,失利返回EOF。

例:fputc(‘X’,fp);

4.fgetc()
从流中读一个字符,原型是int fputc(FILE *stream); 胜利返回这个字符,失利返回EOF。

例:char ch1=fgetc(fp);

  1. fseek()
    此函数平常用于二进制情势翻开的文件中,功用是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);假如胜利返回0,参数offset是挪动的字符数,whence是挪动的基准,取值是

标记常量 值 基准位置
SEEK_SET 0 文件开首
SEEK_CUR 1 当前读写的位置
SEEK_END 2 文件尾部

例:fseek(fp,1234L,SEEK_CUR);//把读写位置从当前位置向后挪动1234字节(L后缀示意长整数)

fseek(fp,0L,2);//把读写位置挪动到文件尾

6.fputs()
写一个字符串到流中,原型int fputs(const char *s, FILE *stream);

例:fputs(“I Love You”,fp);

7.fgets()
从流中读一行或指定个字符,原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,假如胜利则返回s的指针,不然返回NULL。

例:假如一个文件的当前位置的文本以下

Love ,I Have

But ……..

假如用

fgets(str1,4,file1);

则实行后str1=”Lov”,读取了4-1=3个字符,而假如用

fgets(str1,23,file1);

则实行str=”Love ,I Have”,读取了一行(不包括行尾的’\n’)。

8.fprintf()
按花样输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()雷同,不过不是写到控制台,而是写到流罢了

例:fprintf(fp,”-%s”,4,”Hahaha”);

9.fscanf()
从流中按花样读取,其原型是int fscanf(FILE *stream, const char *format[, address, …]);其用法和scanf()雷同,不过不是从控制台读取,而是从流读取罢了。

例:fscanf(fp,”%d%d” ,&x,&y);

10.feof()
检测是不是已到文件尾,是返回真,不然返回0,其原型是int feof(FILE *stream);

例:if(feof(fp))printf(“已到文件尾”);

11.ferror()
原型是int ferror(FILE *stream);返回流近来的毛病代码,可用clearerr()来消灭它,clearerr()的原型是void clearerr(FILE *stream);

例:printf(“%d”,ferror(fp));

12.rewind()
把当前的读写位置回到文件最先,原型是void rewind(FILE *stream);实在本函数相当于fseek(fp,0L,SEEK_SET);

例:rewind(fp);

13.remove()
删除文件,原型是int remove(const char *filename); 参数就是要删除的文件名,胜利返回0。

例:remove(“c:\io.sys”);

14.fread()
从流中读指定个数的字符,原型是size_t fread(void ptr, size_t size, size_t n, FILE *stream);参数ptr是保留读取的数据,void的指针可用任何范例的指针来替代,如char*、int *等等来替代;size是每块的字节数;n是读取的块数,假如胜利,返回现实读取的块数(不是字节数),本函数平常用于二进制情势翻开的文件中。

例:

char x[4230];
FILE *file1=fopen(“c:\msdos.sys”,”r”);

fread(x,200,12 ,file1);//共读取200*12=2400个字节

15.fwrite()
与fread对应,向流中写指定的数据,原型是size_t fwrite(const void ptr, size_t size, size_t n, FILE *stream);参数ptr是要写入的数据指针,void的指针可用任何范例的指针来替代,如char*、int *等等来替代;size是每块的字节数;n是要写的块数,假如胜利,返回现实写入的块数(不是字节数),本函数平常用于二进制情势翻开的文件中。

例:

char x[]=”I Love You”;
fwire(x, 6,12,fp);//写入6*12=72字节

将把”I Love”写到流fp中12次,共72字节

16.tmpfile()
其原型是FILE *tmpfile(void); 生成一个暂时文件,以”w+b”的情势翻开,并返回这个暂时流的指针,假如失利返回NULL。在顺序完毕时,这个文件会被自动删除。

例:FILE *fp=tmpfile();

17.tmpnam();
其原型为char *tmpnam(char *s); 生成一个唯一的文件名,实在tmpfile()就调用了此函数,参数s用来保留取得的文件名,并返回这个指针,假如失利,返回NULL。

例:tmpnam(str1);

二、直接I/O文件支配

这是C供应的另一种文件支配,它是经由过程直接存/取文件来完成对文件的处置惩罚,而上篇所说流式文件支配是经由过程缓冲区来举行;流式文件支配是缭绕一个FILE指 针来举行,而此类文件支配是缭绕一个文件的“句柄”来举行,什么是句柄呢?它是一个整数,是体系用来标识一个文件(在WINDOWS中,句柄的观点扩大到 一切装备资本的标识)的唯一的暗号。此类文件支配经常运用的函数以下表,这些函数及其所用的一些标记在io.h和 fcntl.h中定义,在运用时要到场响应的头文件。

函数 申明
open() 翻开一个文件并返回它的句柄
close() 封闭一个句柄
lseek() 定位到文件的指定位置
read() 块读文件
write() 块写文件
eof() 测试文件是不是完毕
filelength() 取得文件长度
rename() 重定名文件
chsize() 转变文件长度

下面就对这些函数逐一申明:

1.open()
翻开一个文件并返回它的句柄,假如失利,将返回一个小于0的值,原型是int open(const char *path, int access [, unsigned mode]); 参数path是要翻开的文件名,access是翻开的情势,mode是可选项。示意文件的属性,重要用于UNIX体系中,在DOS/WINDOWS这个参 数没有意义。个中文件的翻开情势以下表。

标记 寄义 标记 寄义 标记 寄义
O_RDONLY 只读体式格局 O_WRONLY 只写体式格局 O_RDWR 读/写体式格局
O_NDELAY 用于UNIX体系 O_APPEND 追加体式格局 O_CREAT 假如文件不存在就建立
O_TRUNC 把文件长度截为0 O_EXCL 和O_CREAT连用,假如文件存在返回毛病 O_BINARY 二进制体式格局
O_TEXT 文本体式格局

关于多个请求,可以用”|”运算符来衔接,如O_APPEND|O_TEXT示意以文本情势和追加体式格局翻开文件。

例:int handle=open(“c:\msdos.sys”,O_BINARY|O_CREAT|O_WRITE)

2.close()
封闭一个句柄,原型是int close(int handle);假如胜利返回0

例:close(handle)

3.lseek()
定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);参数offset是挪动的量,fromwhere是挪动的基准位置,取值和前面讲的fseek()一样,SEEK_SET:文件首 部;SEEK_CUR:文件当前位置;SEEK_END:文件尾。此函数返回实行后文件新的存取位置。

例:

lseek(handle,-1234L,SEEK_CUR);//把存取位置从当前位置向前挪动1234个字节。
x=lseek(hnd1,0L,SEEK_END);//把存取位置挪动到文件尾,x=文件尾的位置即文件长度

4.read()
从文件读取一块,原型是int read(int handle, void *buf, unsigned len);参数buf保留读出的数据,len是读取的字节。函数返回现实读出的字节。

例:char x[200];read(hnd1,x,200);

5.write()
写一块数据到文件中,原型是int write(int handle, void *buf, unsigned len);参数的寄义同read(),返回现实写入的字节。

例:char x[]=”I Love You”;write(handle,x,strlen(x));

7.eof()
相似feof(),测试文件是不是完毕,是返回1,不然返回0;原型是:int eof(int handle);

例:while(!eof(handle1)){……};

8.filelength()
返回文件长度,原型是long filelength(int handle);相当于lseek(handle,0L,SEEK_END)

例:long x=filelength(handle);

9.rename()
重定名文件,原型是int rename(const char *oldname, const char *newname); 参数oldname是旧文件名,newname是新文件名。胜利返回0

例:rename(“c:\config.sys”,”c:\config.w40”);

10.chsize();
转变文件长度,原型是int chsize(int handle, long size);参数size示意文件新的长度,胜利返回0,不然返回-1,假如指定的长度小于文件长度,则文件被截短;假如指定的长度大于文件长度,则在文件背面补’\0’。

例:chsize(handle,0x12345);

同流式文件支配雷同,这类也供应了Unicode字符支配的函数,如_wopen()等等,用于9X/NT下的宽字符编程,有兴致可自已查询BCB的协助。

别的,此种支配另有lock(),unlock(),locking()等用于多用户支配的函数,但在BCB中用得并不多,我就不引见了,但假如要用C来写CGI,这些就必要的基本知识了,假如你有这方面的请求,那就得自已好好看协助了。

基于C++的文件支配

在C++中,有一个stream这个类,一切的I/O都以这个“流”类为基本的,包括我们要熟悉的文件I/O,stream这个类有两个重要的运算符:

1、插进去器(<<)
向流输出数据。比方说体系有一个默许的规范输出流(cout),平常状况下就是指的显示器,所以,cout<<”Write Stdout”<<’\n’;就示意把字符串”Write Stdout”和换行字符(‘\n’)输出到规范输出流。

2、析取器(>>)
从流中输入数据。比方说体系有一个默许的规范输入流(cin),平常状况下就是指的键盘,所以,cin>>x;就示意从规范输入流中读取一个指定范例(即变量x的范例)的数据。

在C++中,对文件的支配是经由过程stream的子类fstream(file stream)来完成的,所以,要用这类体式格局支配文件,就必需到场头文件fstream.h。下面就把此类的文件支配过程逐一道来。

一、翻开文件
在fstream类中,有一个成员函数open(),就是用来翻开文件的,其原型是:

void open(const char* filename,int openmode,int access);

参数:

filename:  要翻开的文件名
mode:    要翻开文件的体式格局
access:   翻开文件的属性
翻开文件的体式格局在类ios(是一切流式I/O类的基类)中定义,经常运用的值以下:

ios::app:   以追加的体式格局翻开文件
ios::ate:   文件翻开后定位到文件尾,ios:app就包括有此属性
ios::binary:  以二进制体式格局翻开文件,缺省的体式格局是文本体式格局。两种体式格局的区分见前文
ios::in:    文件以输入体式格局翻开(文件=>顺序)
ios::out:   文件以输出体式格局翻开 (顺序=>文件)
ios::nocreate: 不竖立文件,所以文件不存在时翻开失利 
ios::noreplace:不掩盖文件,所以翻开文件时假如文件存在失利
ios::trunc:  假如文件存在,把文件长度设为0
可以用“或”把以上属性衔接起来,如ios::out|ios::binary

翻开文件的属性取值是:

0:一般文件,翻开接见
1:只读文件
2:隐含文件
4:体系文件
可以用“或”或许“+”把以上属性衔接起来 ,如3或1|2就是以只读和隐含属性翻开文件。

比方:以二进制输入体式格局翻开文件c:\config.sys

fstream file1;
file1.open(“c:\config.sys”,ios::binary|ios::in,0);

假如open函数只要文件名一个参数,则是以读/写一般文件翻开,即:

file1.open(“c:\config.sys”);<=>file1.open(“c:\config.sys”,ios::in|ios::out,0);

别的,fstream另有和open()一样的组织函数,关于上例,在定义的时侯就可以翻开文件了:

fstream file1(“c:\config.sys”);

迥殊提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默许以输入体式格局翻开文件(文件=>顺序),而ofstream默许以输出体式格局翻开文件。

ifstream file2(“c:\pdos.def”);//以输入体式格局翻开文件
ofstream file3(“c:\x.123”);//以输出体式格局翻开文件

所以,在现实运用中,根据须要的差别,挑选差别的类来定义:假如想以输入体式格局翻开,就用ifstream来定义;假如想以输出体式格局翻开,就用ofstream来定义;假如想以输入/输出体式格局来翻开,就用fstream来定义。

二、封闭文件
翻开的文件运用完成后肯定要封闭,fstream供应了成员函数close()来完成此支配,如:file1.close();就把file1相连的文件封闭。

三、读写文件
读写文件分为文本文件和二进制文件的读取,关于文本文件的读取比较简朴,用插进去器和析取器就可以了;而关于二进制的读取就要庞杂些,下要就细致的引见这两种体式格局

1、文本文件的读写
文本文件的读写很简朴:用插进去器(<<)向文件输出;用析取器(>>)从文件输入。假定file1是以输入体式格局翻开,file2以输出翻开。示例以下:

file2<<”I Love You”;//向文件写入字符串”I Love You”
int i;
file1>>i;//从文件输入一个整数值。

这类体式格局另有一种简朴的花样化才能,比方可以指定输出为16进制等等,详细的花样有以下一些

支配符 功用 输入/输出
dec 花样化为十进制数值数据 输入和输出
endl 输出一个换行符并革新此流 输出
ends 输出一个空字符 输出
hex 花样化为十六进制数值数据 输入和输出
oct 花样化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数 输出

比方要把123看成十六进制输出:file1<<<123;要把3.1415926以5位精度输出:file1<<<3.1415926。

2、二进制文件的读写
①put()
put()函数向流写入一个字符,其原型是ofstream &put(char ch),运用也比较简朴,如file1.put(‘c’);就是向流写一个字符’c’。

②get()
get()函数比较天真,有3种经常运用的重载情势:

一种就是和put()对应的情势:ifstream &get(char &ch);功用是从流中读取一个字符,效果保留在援用ch中,假如到文件尾,返回空字符。如file2.get(x);示意从文件中读取一个字符,并把读取的字符保留在x中。

另一种重载情势的原型是: int get();这类情势是从流中返回一个字符,假如抵达文件尾,返回EOF,如x=file2.get();和上例功用是一样的。

另有一种情势的原型是:ifstream &get(char *buf,int num,char delim=’\n’);这类情势把字符读入由 buf 指向的数组,直到读入了 num 个字符或碰到了由 delim 指定的字符,假如没运用 delim 这个参数,将运用缺省值换行符’\n’。比方:

file2.get(str1,127,’A’);//从文件中读取字符到字符串str1,当碰到字符’A’或读取了127个字符时停止。

③读写数据块
要读写二进制数据块,运用成员函数read()和write()成员函数,它们原型以下:

read(unsigned char *buf,int num);
write(const unsigned char *buf,int num);

read()从文件中读取 num 个字符到 buf 指向的缓存中,假如在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得现实读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注重的是缓存的范例是 unsigned char *,偶然可以须要范例转换。

例:

unsigned char str1[]=”I Love You”;
int n[5];
ifstream in(“xxx.xxx”);
ofstream out(“yyy.yyy”);
out.write(str1,strlen(str1));//把字符串str1悉数写到yyy.yyy中
in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注重范例转换
in.close();out.close();

四、检测EOF
成员函数eof()用来检测是不是抵达文件尾,假如抵达文件尾返回非0值,不然返回0。原型是int eof();

例:  if(in.eof())ShowMessage(“已抵达文件尾!”);

五、文件定位
和C的文件支配体式格局差别的是,C++ I/O体系管理两个与一个文件相联系的指针。一个是读指针,它申明输入支配在文件中的位置;另一个是写指针,它下次写支配的位置。每次实行输入或输出时, 响应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的情势以下:

istream &seekg(streamoff offset,seek_dir origin);
ostream &seekp(streamoff offset,seek_dir origin);

streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 示意挪动的基准位置,是一个有以下值的罗列:

ios::beg:  文件开首
ios::cur:  文件当前位置
ios::end:  文件末端
这两个函数平常用于二进制文件,因为文本文件会因为体系对字符的诠释而可以与料想的值差别。

例:

file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节
file2.seekp(1234,ios::beg);//把文件的写指针从文件开首向后移1234个字节

基于WINAPI的文件支配

  WINAPI供应了两种文件支配函数,一组是为了和16位顺序兼容,这类函数比较简朴;而另一种是特地为32位顺序设计,在运用时就显得贫苦些,下面我就把这两组函数逐一引见:

一、和16位顺序兼容的一组函数

⑴_lopen
原型:HFILE _lopen(
LPCSTR lpPathName, // 文件名
int iReadWrite //文件存取体式格局
);

功用:翻开文件,胜利返回其句柄,与此相似的另有个OpenFile()函数,可自行查阅协助文件。

参数申明:lpPathName是要翻开的文件名,iReadWrite是文件存取体式格局,重要有3种体式格局:

OF_READ:以只读体式格局翻开
OF_READWRITE:以读写体式格局翻开
OF_WRITE:以只写体式格局翻开
  另有如 OF_SHARE_COMPAT 等属性,因为不太经常运用,为里就不逐一引见了。

⑵_lclose()
原型:HFILE _lclose( HFILE hFile);

功用:封闭文件,胜利返回0

参数申明:hFile:要封闭的句柄

⑶_lread()
原型:UINT _lread( HFILE hFile, // 文件句柄
LPVOID lpBuffer, // 保留数据的缓冲区
UINT uBytes // 要读取的长度
);

功用:读文件,返回现实读取的字符数,与此相似的另有个_hread()函数,可自行查阅协助文件。

⑷_lwrite()
原型:UINT _lwrite( HFILE hFile, // 文件句柄
LPCSTR lpBuffer, // 保留数据的缓冲区
UINT uBytes // 要写的长度
);

功用:写文件,返回现实写的字符数,与此相似的另有个_hwrite()函数,可自行查阅协助文件。

⑸_llseek()
原型:LONG _llseek( HFILE hFile, // 文件句柄
LONG lOffset, // 挪动的量
int iOrigin // 挪动的基准位置
);

功用:挪动文件的读写位置,胜利返回挪动后的文件读写位置

参数申明:iOrigin的取值是以下三种状况之一:

FILE_BEGIN:文件头部
FILE_CURRENT:文件当前位置
FILE_END:文件尾部
⑹_lcreat()
原型:HFILE _lcreat( LPCSTR lpPathName, //要建立的文件名
int iAttribute // 文件属性
);

功用:建立文件,胜利返回其句柄

参数申明:文件属性是以下值的和:

0:一般文件
1:只读文件
2:隐含文件
4:体系文件
  这几个函数的用法和所列的BCB库函数差不多,发起运用BCB的库函数。可参阅前文基于BCB库函数的文件支配。

二、32位顺序兼容

CreateFile
翻开文件
要对文件举行读写等支配,起首必需取得文件句柄,经由过程该函数可以取得文件句柄,该函数是通向文件天下的大门。

ReadFile
从文件中读取字节信息。
在翻开文件取得了文件句柄以后,则可以经由过程该函数读取数据。

WriteFile
向文件写入字节信息。
一样可以将文件句柄传给该函数,从而完成对文件数据的写入。

CloseHandle
封闭文件句柄。
翻开门以后,天然要记得关上。

GetFileTime
猎取文件时候。
有三个文件时候可供猎取:建立时候、末了接见时候、末了写时候。
该函数一样须要文件句柄作为进口参数。

GetFileSize
猎取文件大小。
因为文件大小可以高达上数G(1G须要30位),因而一个32位的双字节范例没法对其准确表达,因而返回码示意低32位,另有一个出口参数可以传出高32位。
该函数一样须要文件句柄作为进口参数。

GetFileAttributes
猎取文件属性。
可以猎取文件的存档、只读、体系、隐蔽等属性。
该函数只需一个文件途径作为参数。

SetFileAttributes
设置文件属性。
能猎取,天然也应该能设置。
可以设置文件的存档、只读、体系、隐蔽等属性。
该函数只需一个文件途径作为参数。

GetFileInformationByHandle
猎取一切文件信息
该函数可以猎取上面一切函数所可以猎取的信息,如大小、属性等,同时还包括一些其他地方没法猎取的信息,比方:文件卷标、索引和链接信息。
该函数须要文件句柄作为进口参数。

GetFullPathName
猎取文件途径,该函数猎取文件的完全途径名。
须要提示的是:只要当该文件在当前目次下,效果才准确。假如要取得真正的途径。应该用GetModuleFileName函数。

CopyFile
复制文件
注重:只能复制文件,而不能复制目次

MoveFileEx
挪动文件
既可以挪动文件,也可以挪动目次,但不能逾越盘符。(Window2000下设置挪动标志可以完成逾越盘符支配)

DeleteFile
删除文件

GetTempPath
猎取Windows暂时目次途径

GetTempFileName
在Windows暂时目次途径下建立一个唯一的暂时文件

SetFilePoint
挪动文件指针。
该函数用于对文件举行高等读写支配时。

文件的锁定息争锁

LockFile
UnlockFile
LockFileEx
UnlockFileEx

以上四个函数用于对文件举行锁定息争锁。如许可以完成文件的异步支配。可同时对文件的差别部份举行各自的支配。

文件的紧缩息争紧缩

LZOpenFile
翻开紧缩文件以读取

LZSeek
查找紧缩文件中的一个位置

LZRead
读一个紧缩文件

LZClose
封闭一个紧缩文件

LZCopy
复制紧缩文件并在处置惩罚过程当中睁开

GetExpandedName
从紧缩文件中返回文件名称。

以上六个函数为32位 API 中的一个小扩大库,文件紧缩扩大库中的函数。文件紧缩可以用敕令 compress 建立。

文件映像/映照

32位 API 供应一个称为文件映像/映照的特征,它许可将文件直接映照为一个运用的假造内存空间,这一手艺可用于简化和加快文件接见。

CreateFileMapping
建立和定名映照

MapViewOfFile
把文件映照装载如内存

UnmapViewOfFile
开释视图并把变化写回文件

FlushViewOfFile
将视图的变化革新写入磁盘

相干引荐:

C# 写入文件支配-极客学院C#视频教程

C#对Word文档的建立、插进去表格、设置款式等支配实例

以上就是基于C的文件支配 (FILE*、fstream、windowsAPI )的细致内容,更多请关注ki4网别的相干文章!

标签:C/C++文件读写


欢迎 发表评论: