欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      C++ builder 的文件讀寫操作總結(jié)(模版)

      時(shí)間:2019-05-15 09:49:28下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《C++ builder 的文件讀寫操作總結(jié)(模版)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《C++ builder 的文件讀寫操作總結(jié)(模版)》。

      第一篇:C++ builder 的文件讀寫操作總結(jié)(模版)

      C++ builder 的文件讀寫操作總結(jié)

      在編程的過程中,文件的操作是一個(gè)經(jīng)常用到的問題,在C++Builder中,可以使用多種方法對(duì)文件操作,下面我就按以下幾個(gè)部分對(duì)此作詳細(xì)介紹,就是:

      1、基于C的文件操作;

      2、基于C++的文件操作;

      3、基于WINAPI的文件操作;

      4、基于BCB庫的文件操作;

      5、特殊文件的操作。

      壹、基于C的文件操作

      在ANSI C中,對(duì)文件的操作分為兩種方式,即流式文件操作和I/O文件操作,下面就分別介紹之。

      一、流式文件操作

      這種方式的文件操作有一個(gè)重要的結(jié)構(gòu)FILE,F(xiàn)ILE在stdio.h中定義如下:

      typedef struct { int level;/* fill/empty level of buffer */ unsigned flags;/* File status flags */ char fd;/* File descriptor */ unsigned char hold;/* Ungetc char if no buffer */ int bsize;/* Buffer size */ unsigned char _FAR *buffer;/* Data transfer buffer */ unsigned char _FAR *curp;/* Current active pointer */ unsigned istemp;/* Temporary file indicator */ short token;/* Used for validity checking */ } FILE;/* This is the FILE object */

      FILE這個(gè)結(jié)構(gòu)包含了文件操作的基本屬性,對(duì)文件的操作都要通過這個(gè)結(jié)構(gòu)的指針來進(jìn)行,此種文件操作常用的函數(shù)見下表函數(shù)功能

      fopen()打開流

      fclose()關(guān)閉流

      fputc()寫一個(gè)字符到流中

      fgetc()從流中讀一個(gè)字符

      fseek()在流中定位到指定的字符

      fputs()寫字符串到流

      fgets()從流中讀一行或指定個(gè)字符

      fprintf()按格式輸出到流

      fscanf()從流中按格式讀取

      feof()到達(dá)文件尾時(shí)返回真值

      ferror()發(fā)生錯(cuò)誤時(shí)返回其值

      rewind()復(fù)位文件定位器到文件開始處

      remove()刪除文件 fread()從流中讀指定個(gè)數(shù)的字符

      fwrite()向流中寫指定個(gè)數(shù)的字符

      tmpfile()生成一個(gè)臨時(shí)文件流

      tmpnam()生成一個(gè)唯一的文件名

      下面就介紹一下這些函數(shù)

      1.fopen()

      fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen實(shí)現(xiàn)三個(gè)功能

      為使用而打開一個(gè)流

      把一個(gè)文件和此流相連接

      給此流返回一個(gè)FILR指針

      參數(shù)filename指向要打開的文件名,mode表示打開狀態(tài)的字符串,其取值如下表

      字符串含義

      “r” 以只讀方式打開文件

      “w” 以只寫方式打開文件

      “a” 以追加方式打開文件

      “r+” 以讀/寫方式打開文件,如無文件出錯(cuò)

      “w+” 以讀/寫方式打開文件,如無文件生成新文件

      一個(gè)文件可以以文本模式或二進(jìn)制模式打開,這兩種的區(qū)別是:在文本模式中回車被當(dāng)成一個(gè)字符'n',而二進(jìn)制模式認(rèn)為它是兩個(gè)字符0x0D,0x0A;如果在文件中讀到0x1B,文本模式會(huì)認(rèn)為這是文件結(jié)束符,也就是二進(jìn)制模型不會(huì)對(duì)文件進(jìn)行處理,而文本方式會(huì)按一定的方式對(duì)數(shù)據(jù)作相應(yīng)的轉(zhuǎn)換。

      系統(tǒng)默認(rèn)的是以文本模式打開,可以修改全部變量_fmode的值來修改這個(gè)設(shè)置,例如_fmode=O_TEXT;就設(shè)置默認(rèn)打開方式為文本模式;而_fmode=O_BINARY;則設(shè)置默認(rèn)打開方式是二進(jìn)制模式。

      我們也可以在模式字符串中指定打開的模式,如“rb”表示以二進(jìn)制模式打開只讀文件,“w+t”或“wt+”表示以文本模式打開讀/寫文件。

      此函數(shù)返回一個(gè)FILE指針,所以申明一個(gè)FILE指針后不用初始化,而是用fopen()來返回一個(gè)指針并與一個(gè)特定的文件相連,如果成敗,返回NULL。

      例:

      FILE *fp;

      if(fp=fopen(“123.456”,“wb”))

      puts(“打開文件成功”);

      else

      puts(“打開文件成敗”);

      2.fclose()

      fclose()的功能就是關(guān)閉用fopen()打開的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失敗返回EOF。

      在程序結(jié)束時(shí)一定要記得關(guān)閉打開的文件,不然可能會(huì)造成數(shù)據(jù)丟失的情況,我以前就經(jīng)常犯這樣的毛病。

      例:fclose(fp);3.fputc()

      向流寫一個(gè)字符,原型是int fputc(int c, FILE *stream);成功返回這個(gè)字符,失敗返回EOF。

      例:fputc('X',fp);

      4.fgetc()

      從流中讀一個(gè)字符,原型是int fputc(FILE *stream);成功返回這個(gè)字符,失敗返回EOF。

      例:char ch1=fgetc(fp);

      5.fseek()

      此函數(shù)一般用于二進(jìn)制模式打開的文件中,功能是定位到流中指定的位置,原型是int fseek(FILE *stream, long offset, int whence);如果成功返回0,參數(shù)offset是移動(dòng)的字符數(shù),whence是移動(dòng)的基準(zhǔn),取值是

      符號(hào)常量值基準(zhǔn)位置

      SEEK_SET 0 文件開頭

      SEEK_CUR 1 當(dāng)前讀寫的位置

      SEEK_END 2 文件尾部

      例:fseek(fp,1234L,SEEK_CUR);//把讀寫位置從當(dāng)前位置向后移動(dòng)1234字節(jié)(L后綴表示長整數(shù))

      fseek(fp,0L,2);//把讀寫位置移動(dòng)到文件尾

      6.fputs()

      寫一個(gè)字符串到流中,原型int fputs(const char *s, FILE *stream);

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

      7.fgets()

      從流中讀一行或指定個(gè)字符,原型是char *fgets(char *s, int n, FILE *stream);從流中讀取n-1個(gè)字符,除非讀完一行,參數(shù)s是來接收字符串,如果成功則返回s的指針,否則返回NULL。

      例:如果一個(gè)文件的當(dāng)前位置的文本如下

      Love ,I Have

      But ……..如果用

      fgets(str1,4,file1);

      則執(zhí)行后str1=“Lov”,讀取了4-1=3個(gè)字符,而如果用

      fgets(str1,23,file1);

      則執(zhí)行str=“Love ,I Have”,讀取了一行(不包括行尾的'n')。

      8.fprintf()

      按格式輸入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ?]);其用法和printf()相同,不過不是寫到控制臺(tái),而是寫到流罷了

      例:fprintf(fp,“%2d%s”,4,“Hahaha”);

      9.fscanf()

      從流中按格式讀取,其原型是int fscanf(FILE *stream, const char *format[, address, ?]);其用法和scanf()相同,不過不是從控制臺(tái)讀取,而是從流讀取罷了。

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

      10.feof()

      檢測是否已到文件尾,是返回真,否則返回0,其原型是int feof(FILE *stream);

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

      11.ferror()

      原型是int ferror(FILE *stream);返回流最近的錯(cuò)誤代碼,可用clearerr()來清除它,clearerr()的原型是void clearerr(FILE *stream);

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

      12.rewind()

      把當(dāng)前的讀寫位置回到文件開始,原型是void rewind(FILE *stream);其實(shí)本函數(shù)相當(dāng)于fseek(fp,0L,SEEK_SET);

      例:rewind(fp);

      12.remove()

      刪除文件,原型是int remove(const char *filename);參數(shù)就是要?jiǎng)h除的文件名,成功返回0。

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

      13.fread()

      從流中讀指定個(gè)數(shù)的字符,原型是size_t fread(void *ptr, size_t size, size_t n, FILE *stream);參數(shù)ptr是保存讀取的數(shù)據(jù),void*的指針可用任何類型的指針來替換,如char*、int *等等來替換;size是每塊的字節(jié)數(shù);n是讀取的塊數(shù),如果成功,返回實(shí)際讀取的塊數(shù)(不是字節(jié)數(shù)),本函數(shù)一般用于二進(jìn)制模式打開的文件中。

      例:

      char x[4230];

      FILE *file1=fopen(“c:msdos.sys”,“r”);

      fread(x,200,12 ,file1);//共讀取200*12=2400個(gè)字節(jié)

      14.fwrite()

      與fread對(duì)應(yīng),向流中寫指定的數(shù)據(jù),原型是size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);參數(shù)ptr是要寫入的數(shù)據(jù)指針,void*的指針可用任何類型的指針來替換,如char*、int *等等來替換;size是每塊的字節(jié)數(shù);n是要寫的塊數(shù),如果成功,返回實(shí)際寫入的塊數(shù)(不是字節(jié)數(shù)),本函數(shù)一般用于二進(jìn)制模式打開的文件中。

      例:

      char x[]=“I Love You”;

      fwire(x, 6,12,fp);//寫入6*12=72字節(jié)

      將把“I Love”寫到流fp中12次,共72字節(jié)

      15.tmpfile()

      其原型是FILE *tmpfile(void);生成一個(gè)臨時(shí)文件,以“w+b”的模式打開,并返回這個(gè)臨時(shí)流的指針,如果失敗返回NULL。在程序結(jié)束時(shí),這個(gè)文件會(huì)被自動(dòng)刪除。

      例:FILE *fp=tmpfile();

      16.tmpnam();

      其原型為char *tmpnam(char *s);生成一個(gè)唯一的文件名,其實(shí)tmpfile()就調(diào)用了此函數(shù),參數(shù)s用來保存得到的文件名,并返回這個(gè)指針,如果失敗,返回NULL。例:tmpnam(str1);

      二、直接I/O文件操作

      這是C提供的另一種文件操作,它是通過直接存/取文件來完成對(duì)文件的處理,而上篇所說流式文件操作是通過緩沖區(qū)來進(jìn)行;流式文件操作是圍繞一個(gè)FILE指針來進(jìn)行,而此類文件操作是圍繞一個(gè)文件的“句柄”來進(jìn)行,什么是句柄呢?它是一個(gè)整數(shù),是系統(tǒng)用來標(biāo)識(shí)一個(gè)文件(在WINDOWS中,句柄的概念擴(kuò)展到所有設(shè)備資源的標(biāo)識(shí))的唯一的記號(hào)。此類文件操作常用的函數(shù)如下表,這些函數(shù)及其所用的一些符號(hào)在io.h和fcntl.h中定義,在使用時(shí)要加入相應(yīng)的頭文件。

      函數(shù)說明

      open()打開一個(gè)文件并返回它的句柄

      close()關(guān)閉一個(gè)句柄

      lseek()定位到文件的指定位置

      read()塊讀文件

      write()塊寫文件

      eof()測試文件是否結(jié)束

      filelength()取得文件長度

      rename()重命名文件

      chsize()改變文件長度

      下面就對(duì)這些函數(shù)一一說明:

      1.open()

      打開一個(gè)文件并返回它的句柄,如果失敗,將返回一個(gè)小于0的值,原型是int open(const char *path, int access [, unsigned mode]);參數(shù)path是要打開的文件名,access是打開的模式,mode是可選項(xiàng)。表示文件的屬性,主要用于UNIX系統(tǒng)中,在DOS/WINDOWS這個(gè)參數(shù)沒有意義。其中文件的打開模式如下表。

      符號(hào)含義符號(hào)含義符號(hào)含義

      O_RDONLY 只讀方式 O_WRONLY 只寫方式 O_RDWR 讀/寫方式

      O_NDELAY 用于UNIX系統(tǒng) O_APPEND 追加方式 O_CREAT 如果文件不存在就創(chuàng)建

      O_TRUNC 把文件長度截為0 O_EXCL 和O_CREAT連用,如果文件存在返回錯(cuò)誤 O_BINARY 二進(jìn)制方式

      O_TEXT 文本方式

      對(duì)于多個(gè)要求,可以用“|”運(yùn)算符來連接,如O_APPEND|O_TEXT表示以文本模式和追加方式打開文件。

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

      2.close()

      關(guān)閉一個(gè)句柄,原型是int close(int handle);如果成功返回0

      例:close(handle)

      3.lseek()

      定位到指定的位置,原型是:long lseek(int handle, long offset, int fromwhere);參數(shù)offset是移動(dòng)的量,fromwhere是移動(dòng)的基準(zhǔn)位置,取值和前面講的fseek()一樣,SEEK_SET:文件首部;SEEK_CUR:文件當(dāng)前位置;SEEK_END:文件尾。此函數(shù)返回執(zhí)行后文件新的存取位置。

      例:

      lseek(handle,-1234L,SEEK_CUR);//把存取位置從當(dāng)前位置向前移動(dòng)1234個(gè)字節(jié)。

      x=lseek(hnd1,0L,SEEK_END);//把存取位置移動(dòng)到文件尾,x=文件尾的位置即文件長度

      4.read()

      從文件讀取一塊,原型是int read(int handle, void *buf, unsigned len);參數(shù)buf保存讀出的數(shù)據(jù),len是讀取的字節(jié)。函數(shù)返回實(shí)際讀出的字節(jié)。

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

      5.write()

      寫一塊數(shù)據(jù)到文件中,原型是int write(int handle, void *buf, unsigned len);參數(shù)的含義同read(),返回實(shí)際寫入的字節(jié)。

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

      7.eof()

      類似feof(),測試文件是否結(jié)束,是返回1,否則返回0;原型是:int eof(int handle);

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

      8.filelength()

      返回文件長度,原型是long filelength(int handle);相當(dāng)于lseek(handle,0L,SEEK_END)

      例:long x=filelength(handle);

      9.rename()

      重命名文件,原型是int rename(const char *oldname, const char *newname);參數(shù)oldname是舊文件名,newname是新文件名。成功返回0

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

      10.chsize();

      改變文件長度,原型是int chsize(int handle, long size);參數(shù)size表示文件新的長度,成功返回0,否則返回-1,如果指定的長度小于文件長度,則文件被截短;如果指定的長度大于文件長度,則在文件后面補(bǔ)'