奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語(yǔ)言

C語(yǔ)言文件操作教程

時(shí)間:2024-09-07 16:13:17 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言文件操作教程

  引導(dǎo)語(yǔ);C語(yǔ)言的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,以下是百分網(wǎng)小編分享給大家的C語(yǔ)言文件操作教程,歡迎閱讀,更多精彩請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  一、標(biāo)準(zhǔn)文件的讀寫(xiě)

  1.文件的打開(kāi)fopen()

  文件的打開(kāi)操作表示將給用戶指定的文件在內(nèi)存分配一個(gè)FILE結(jié)構(gòu)區(qū),并將該結(jié)構(gòu)的指針?lè)祷亟o用戶程序,以后用戶程序就可用此FILE指針來(lái)實(shí)現(xiàn)對(duì)指定文件的存取操作了。當(dāng)使用打開(kāi)函數(shù)時(shí),必須給出文件名、文件操作方式(讀、寫(xiě)或讀寫(xiě)),如果該文件名不存在,就意味著建立(只對(duì)寫(xiě)文件而言,對(duì)讀文件則出錯(cuò)),并將文件指針指向文件開(kāi)頭。若已有一個(gè)同名文件存在,則刪除該文件,若無(wú)同名文件,則建立該文件,并將文件指針指向文件開(kāi)頭。

  fopen(char *filename,char *type);

  其中*filename是要打開(kāi)文件的文件名指針,一般用雙引號(hào)括起來(lái)的文件名表示,也可使用雙反斜杠隔開(kāi)的路徑名。而*type參數(shù)表示了對(duì)打開(kāi)文件的操作方式。其可采用的操作方式如下:

  方式 含義

  r 打開(kāi),只讀

  w 打開(kāi),文件指針指到頭,只寫(xiě)

  a 打開(kāi),指向文件尾,在已存在文件中追加

  rb 打開(kāi)一個(gè)二進(jìn)制文件,只讀

  wb 打開(kāi)一個(gè)二進(jìn)制文件,只寫(xiě)

  ab 打開(kāi)一個(gè)二進(jìn)制文件,進(jìn)行追加

  r+ 以讀/寫(xiě)方式打開(kāi)一個(gè)已存在的文件

  w+ 以讀/寫(xiě)方式建立一個(gè)新的文本文件

  a+ 以讀/寫(xiě)方式打開(kāi)一個(gè)文件文件進(jìn)行追加

  rb+ 以讀/寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件

  wb+ 以讀/寫(xiě)方式建立一個(gè)新的二進(jìn)制文件

  ab+ 以讀/寫(xiě)方式打開(kāi)一個(gè)二進(jìn)制文件進(jìn)行追加

  當(dāng)用fopen(0成功的打開(kāi)一個(gè)文件時(shí),該函數(shù)將返回一個(gè)FILE指針,如果文件打開(kāi)失敗,將返回一個(gè)NULL指針。如想打開(kāi)test文件,進(jìn)行寫(xiě):

  FILE *fp;

  if((fp=fopen(test,w))==NULL)

  {

  printf(File cannot be opened\n);

  exit();

  }

  else

  printf(File opened for writing\n);

  ……

  fclose(fp);

  DOS操作系統(tǒng)對(duì)同時(shí)打開(kāi)的文件數(shù)目是有限制的,缺省值為5,可以通過(guò)修改CONFIG.SYS文件改變這個(gè)設(shè)置。

  2.關(guān)閉文件函數(shù)fclose()

  文件操作完成后,必須要用fclose()函數(shù)進(jìn)行關(guān)閉,這是因?yàn)閷?duì)打開(kāi)的文件進(jìn)行寫(xiě)入時(shí),若文件緩沖區(qū)的空間未被寫(xiě)入的內(nèi)容填滿,這些內(nèi)容不會(huì)寫(xiě)到打開(kāi)的文件中去而丟失。只有對(duì)打開(kāi)的文件進(jìn)行關(guān)閉操作時(shí),停留在文件緩沖區(qū)的內(nèi)容才能寫(xiě)到該文件中去,從而使文件完整。再者一旦關(guān)閉了文件,該文件對(duì)應(yīng)的FILE結(jié)構(gòu)將被釋放,從而使關(guān)閉的文件得到保護(hù),因?yàn)檫@時(shí)對(duì)該文件的存取操作將不會(huì)進(jìn)行。文件的關(guān)閉也意味著釋放了該文件的緩沖區(qū)。

  int fclose(FILE *stream);

  它表示該函數(shù)將關(guān)閉FILE指針對(duì)應(yīng)的文件,并返回一個(gè)整數(shù)值。若成功地關(guān)閉了文件,則返回一個(gè)0值,否則返回一個(gè)非0值。常用以下方法進(jìn)行測(cè)試:

  if(fclose(fp)!=0)

  {

  printf(File cannot be closed\n);

  exit(1);

  }

  else

  printf(File is now closed\n);

  當(dāng)打開(kāi)多個(gè)文件進(jìn)行操作,而又要同時(shí)關(guān)閉時(shí),可采用fcloseall()函數(shù),它將關(guān)閉所有在程序中打開(kāi)的文件。

  int fcloseall();

  該函數(shù)將關(guān)閉所有已打開(kāi)的文件,將各文件緩沖區(qū)未裝滿的內(nèi)容寫(xiě)到相應(yīng)的文件中去,接著釋放這些緩沖區(qū),并返回關(guān)閉文件的數(shù)目。如關(guān)閉了4個(gè)文件,則當(dāng)執(zhí)行:

  n=fcloseall();

  時(shí),n應(yīng)為4。

  3.文件的讀寫(xiě)

  (1).讀寫(xiě)文件中字符的函數(shù)(一次只讀寫(xiě)文件中的一個(gè)字符):

  int fgetc(FILE *stream);

  int fgetchar(void);

  int fputc(int ch,FILE *stream);

  int fputchar(int ch);

  int getc(FILE *stream);

  int putc(int ch,FILE *stream);

  其中fgetc()函數(shù)將把由流指針指向的文件中的一個(gè)字符讀出,例如:

  ch=fgetc(fp);

  將把流指針fp指向的文件中的一個(gè)字符讀出,并賦給ch,當(dāng)執(zhí)行fgetc()函數(shù)時(shí),若當(dāng)時(shí)文件指針指到文件尾,即遇到文件結(jié)束標(biāo)志EOF(其對(duì)應(yīng)值為-1),該函數(shù)返回一個(gè)-1給ch,在程序中常用檢查該函數(shù)返回值是否為-1來(lái)判斷是否已讀到文件尾,從而決定是否繼續(xù)。

  #include stdio.h

  main()

  {

  FILE *fp;

  ch ch;

  if((fp=fopen(myfile.tex,r))==NULL)

  {

  printf(file cannot be opened\n);

  exit(1);

  }

  while((ch=fgetc(fp))!=EOF) fputc(ch,stdout);

  fclose(fp);

  }

  該程序以只讀方式打開(kāi)myfile.txt文件,在執(zhí)行while循環(huán)時(shí),文件指針每循環(huán)一次后移一個(gè)字符位置。用fgetc()函數(shù)將文件指針指定的字符讀到ch變量中,然后用fputc()函數(shù)在屏幕上顯示,當(dāng)讀到文件結(jié)束標(biāo)志EOF時(shí),變關(guān)閉該文件。

  上面的程序用到了fputc()函數(shù),該函數(shù)將字符變量ch的值寫(xiě)到流指針指定的文件中去,由于流指針用的是標(biāo)準(zhǔn)輸出(顯示器)的FILE指針stdout,故讀出的字符將在顯示器上顯示。又比如:

  fputc(ch,fp);

  該函數(shù)執(zhí)行結(jié)構(gòu),將把ch表示的字符送到流指針fp指向的文件中去。

  在TC中,putc()等價(jià)于fput(),getc()等價(jià)于fgetc()。

  putchar(c)相當(dāng)于fputc(c,stdout);getchar()相當(dāng)于fgetc(stdin)。

  注意,這里使用char ch,其實(shí)是不科學(xué)的,因?yàn)樽詈笈袛嘟Y(jié)束標(biāo)志時(shí),是看ch!=EOF,而EOF的值為-1,這顯然和char是不能比較的。所以,某些使用,我們都定義成int ch。

  (2).讀寫(xiě)文件中字符串的函數(shù)

  char *fgets(char *string,int n,FILE *stream);

  char *gets(char *s);

  int fprintf(FILE *stream,char *format,variable-list);

  int fputs(char *string,FILE *stream);

  int fscanf(FILE *stream,char *format,variable-list);

  其中fgets()函數(shù)將把由流指針指定的文件中n-1個(gè)字符,讀到由指針stream指向的字符數(shù)組中去,例如:

  fgets(buffer,9,fp);

  將把fp指向的文件中的8個(gè)字符讀到buffer內(nèi)存區(qū),buffer可以是定義的字符數(shù)組,也可以是動(dòng)態(tài)分配的內(nèi)存區(qū)。

  注意,fgets()函數(shù)讀到'\n'就停止,而不管是否達(dá)到數(shù)目要求。同時(shí)在讀取字符串的最后加上'\0'。

  fgets()函數(shù)執(zhí)行完以后,返回一個(gè)指向該串的指針。如果讀到文件尾或出錯(cuò),則均返回一個(gè)空指針NULL,所以長(zhǎng)用feof()函數(shù)來(lái)測(cè)定是否到了文件尾或者是ferror()函數(shù)來(lái)測(cè)試是否出錯(cuò),例如下面的程序用fgets()函數(shù)讀test.txt文件中的第一行并顯示出來(lái):

  #include stdio.h

  main()

  {

  FILE *fp;

  char str[128];

  if((fp=fopen(test.txt,r))==NULL)

  {

  printf(cannot open file\n);

  exit(1);

  }

  while(!feof(fp))

  {

  if(fgets(str,128,fp)!=NULL) printf(%s,str);

  }

  fclose(fp);

  }

  gets()函數(shù)執(zhí)行時(shí),只要未遇到換行符或文件結(jié)束標(biāo)志,將一直讀下去。因此讀到什么時(shí)候?yàn)橹梗枰脩暨M(jìn)行控制,否則可能造成存儲(chǔ)區(qū)的溢出。

  fputs()函數(shù)想指定文件寫(xiě)入一個(gè)由string指向的字符串,'\0'不寫(xiě)入文件。

  fprintf()和fscanf()同printf()和scanf()函數(shù)類似,不同之處就是printf()函數(shù)是想顯示器輸出,fprintf()則是向流指針指向的文件輸出;fscanf()是從文件輸入。

  下面程序是向文件test.dat里輸入一些字符:

  #include

  main()

  {

  char *s=That's good news;

  int i=617;

  FILE *fp;

  fp=fopne(test.dat, w); /*建立一個(gè)文字文件只寫(xiě)*/

  fputs(Your score of TOEFLis,fp); /*向所建文件寫(xiě)入一串字符*/

  fputc(':', fp); /*向所建文件寫(xiě)冒號(hào):*/

  fprintf(fp, %d\n, i); /*向所建文件寫(xiě)一整型數(shù)*/

  fprintf(fp, %s, s); /*向所建文件寫(xiě)一字符串*/

  fclose(fp);

  }

  用DOS的TYPE命令顯示TEST.DAT的內(nèi)容如下所示:

  屏幕顯示

  Your score of TOEFL is: 617

  That's good news

  下面的程序是把上面的文件test.dat里的內(nèi)容在屏幕上顯示出來(lái):

  #include

  main()

  {

  char *s, m[20];

  int i;

  FILE *fp;

  fp=fopen(test.dat, r); /*打開(kāi)文字文件只讀*/

  fgets(s, 24, fp); /*從文件中讀取23個(gè)字符*/

  printf(%s, s);

  fscanf(fp, %d, &i); /*讀取整型數(shù)*/

  printf(%d, i);

  putchar(fgetc(fp)); /*讀取一個(gè)字符同時(shí)輸出*/

  fgets(m, 17, fp); /*讀取16個(gè)字符*/

  puts(m); /*輸出所讀字符串*/

  fclose(fp);

  getch();

  }

  運(yùn)行后屏幕顯示:

  Your score of TOEFL is: 617

  That's good news

  4.清除和設(shè)置文件緩沖區(qū)

  (1).清除文件緩沖區(qū)函數(shù):

  int fflush(FILE *stream);

  int flushall();

  fflush()函數(shù)將清除由stream指向的文件緩沖區(qū)里的內(nèi)容,常用于寫(xiě)完一些數(shù)據(jù)后,立即用該函數(shù)清除緩沖區(qū),以免誤操作時(shí),破壞原來(lái)的數(shù)據(jù)。

  flushall()將清除所有打開(kāi)文件所對(duì)應(yīng)的文件緩沖區(qū)。

  (2).設(shè)置文件緩沖區(qū)函數(shù)

  void setbuf(FILE *stream,char *buf);

  void setvbuf(FILE *stream,char *buf,int type,unsigned size);

  這兩個(gè)函數(shù)將使得打開(kāi)文件后,用戶可建立自己的文件緩沖區(qū),而不使用fopen()函數(shù)打開(kāi)文件設(shè)定的默認(rèn)緩沖區(qū)。

  對(duì)于setbuf()函數(shù),buf指出的緩沖區(qū)長(zhǎng)度由頭文件stdio.h中定義的宏BUFSIZE的值決定,缺省值為512字節(jié)。當(dāng)選定buf為空時(shí),setbuf函數(shù)將使的文件I/O不帶緩沖。而對(duì)setvbuf函數(shù),則由malloc函數(shù)來(lái)分配緩沖區(qū)。參數(shù)size指明了緩沖區(qū)的長(zhǎng)度(必須大于0),而參數(shù)type則表示了緩沖的類型,其值可以取如下值:

  type 值 含義

  _IOFBF 文件全部緩沖,即緩沖區(qū)裝滿后,才能對(duì)文件讀寫(xiě)

  _IOLBF 文件行緩沖,即緩沖區(qū)接收到一個(gè)換行符時(shí),才能對(duì)文件讀寫(xiě)

  _IONBF 文件不緩沖,此時(shí)忽略buf,size的值,直接讀寫(xiě)文件,不再經(jīng)過(guò)文件緩沖區(qū)緩沖

  5.文件的隨機(jī)讀寫(xiě)函數(shù)

  前面介紹的文件的字符/字符串讀寫(xiě),均是進(jìn)行文件的順序讀寫(xiě),即總是從文件的開(kāi)頭開(kāi)始進(jìn)行讀寫(xiě)。這顯然不能滿足我們的要求,C語(yǔ)言提供了移動(dòng)文件指針和隨機(jī)讀寫(xiě)的函數(shù),它們是:

  (1).移動(dòng)文件指針函數(shù):

  long ftell(FILE *stream);

  int rewind(FILE *stream);

  fseek(FILE *stream,long offset,int origin);

  函數(shù)ftell()用來(lái)得到文件指針離文件開(kāi)頭的偏移量。當(dāng)返回值是-1時(shí)表示出錯(cuò)。

  rewind()函數(shù)用于文件指針移到文件的開(kāi)頭,當(dāng)移動(dòng)成功時(shí),返回0,否則返回一個(gè)非0值。

  fseek()函數(shù)用于把文件指針以origin為起點(diǎn)移動(dòng)offset個(gè)字節(jié),其中origin指出的位置可有以下幾種:

  origin 數(shù)值 代表的具體位置

  SEEK_SET 0 文件開(kāi)頭

  SEEK_CUR 1 文件指針當(dāng)前位置

  SEEK_END 2 文件尾

  例如:

  fseek(fp,10L,0);

  把文件指針從文件開(kāi)頭移到第10字節(jié)處,由于offset參數(shù)要求是長(zhǎng)整型數(shù),故其數(shù)后帶L。

  fseek(fp,-15L,2);

  把文件指針從文件尾向前移動(dòng)15字節(jié)。

  (2).文件隨機(jī)讀寫(xiě)函數(shù)

  int fread(void *ptr,int size,int nitems,FILE *stream);

  int fwrite(void *ptr,int size,int nitems,FILE *stream);

  fread()函數(shù)從流指針指定的文件中讀取nitems個(gè)數(shù)據(jù)項(xiàng),每個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度為size個(gè)字節(jié),讀取的nitems數(shù)據(jù)項(xiàng)存入由ptr指針指向的內(nèi)存緩沖區(qū)中,在執(zhí)行fread()函數(shù)時(shí),文件指針隨著讀取的字節(jié)數(shù)而向后移動(dòng),最后移動(dòng)結(jié)束的位置等于實(shí)際讀出的字節(jié)數(shù)。該函數(shù)執(zhí)行結(jié)束后,將返回實(shí)際讀出的數(shù)據(jù)項(xiàng)數(shù),這個(gè)數(shù)據(jù)項(xiàng)數(shù)不一定等于設(shè)置的nitems,因?yàn)槿粑募袥](méi)有足夠的數(shù)據(jù)項(xiàng),或讀中間出錯(cuò),都會(huì)導(dǎo)致返回的數(shù)據(jù)項(xiàng)數(shù)少于設(shè)置的nitems。當(dāng)返回?cái)?shù)不等于nitems時(shí),可以用feof()或ferror()函數(shù)進(jìn)行檢查。

  fwrite()函數(shù)從ptr指向的緩沖區(qū)中取出長(zhǎng)度為size字節(jié)的nitems個(gè)數(shù)據(jù)項(xiàng),寫(xiě)入到流指針stream指向的文件中,執(zhí)行該操作后,文件指針將向后移動(dòng),移動(dòng)的字節(jié)數(shù)等于寫(xiě)入文件的字節(jié)數(shù)目。該函數(shù)操作完成后,也將返回寫(xiě)入的數(shù)據(jù)項(xiàng)數(shù)。

  二、非標(biāo)準(zhǔn)文件的讀寫(xiě)

  這類函數(shù)最早用于UNIX操作系統(tǒng),ANSI標(biāo)準(zhǔn)未定義,但有時(shí)也經(jīng)常用到,DOS 3.0以上版本支持這些函數(shù)。它們的頭文件為io.h。

  由于我們不常用這些函數(shù),所以在這里就簡(jiǎn)單說(shuō)一下。

  1.文件的打開(kāi)和關(guān)閉

  open()函數(shù)的作用是打開(kāi)文件,其調(diào)用格式為:

  int open(char *filename, int access);

  該函數(shù)表示按access的要求打開(kāi)名為filename的文件,返回值為文件描述字,其中access有兩部分內(nèi)容:

  基本模式和修飾符, 兩者用 (或)方式連接。修飾符可以有多個(gè), 但基本模式只能有一個(gè)。

  access的規(guī)定

  --------------------------------------------------------

  基本模式 含義 修飾符 含 義

  --------------------------------------------------------

  O_RDONLY 只讀 O_APPEND 文件指針指向末尾

  O_WRONLY 只寫(xiě) O_CREAT 文件不存在時(shí)創(chuàng)建文件, 屬性按基本模式屬性

  O_RDWR 讀寫(xiě) O_TRUNC 若文件存在, 將其長(zhǎng)度縮為0, 屬性不變

  O_BINARY 打開(kāi)一個(gè)二進(jìn)制文件

  O_TEXT 打開(kāi)一個(gè)文字文件

  ---------------------------------------------------------

  open()函數(shù)打開(kāi)成功, 返回值就是文件描述字的值(非負(fù)值), 否則返回-1。

  close()函數(shù)的作用是關(guān)閉由open()函數(shù)打開(kāi)的文件, 其調(diào)用格式為:

  int close(int handle);

  該函數(shù)關(guān)閉文件描述字handle相連的文件。

  2.讀寫(xiě)函數(shù)

  int read(int handle, void *buf, int count);

  read()函數(shù)從handle(文件描述字)相連的文件中, 讀取count個(gè)字節(jié)放到buf所指的緩沖區(qū)中,

  返回值為實(shí)際所讀字節(jié)數(shù), 返回-1表示出錯(cuò)。返回0 表示文件結(jié)束。

  write()函數(shù)的調(diào)用格式為:

  int write(int handle, void *buf, int count);

  write()函數(shù)把count個(gè)字節(jié)從buf指向的緩沖區(qū)寫(xiě)入與handle相連的文件中, 返回值為實(shí)際寫(xiě)入的字節(jié)數(shù)。

  3.隨機(jī)定位函數(shù)

  lseek()函數(shù)的調(diào)用格式為:

  int lseek(int handle, long offset, int fromwhere);

  該函數(shù)對(duì)與handle相連的文件位置指針進(jìn)行定位,功能和用法與fseek()函數(shù)相同。

  tell()函數(shù)的調(diào)用格式為:

  long tell(int handle);

  該函數(shù)返回與handle相連的文件現(xiàn)生位置指針, 功能和用法與ftell()相同。

【C語(yǔ)言文件操作教程】相關(guān)文章:

淺談操作系統(tǒng)文件查找教程10-19

C語(yǔ)言的底層操作08-23

C語(yǔ)言頭文件封裝06-25

C語(yǔ)言文件的創(chuàng)建與建立08-12

C語(yǔ)言項(xiàng)目中.h文件和.c文件的關(guān)系詳解05-08

C語(yǔ)言函數(shù)遞歸教程09-25

如何實(shí)現(xiàn)C語(yǔ)言畫(huà)圖教程08-08

怎么利用c語(yǔ)言創(chuàng)建excel文件08-13

C語(yǔ)言位操作是什么?07-18

C語(yǔ)言學(xué)習(xí)中的指針用法教程08-25

主站蜘蛛池模板: 辛集市| 弋阳县| 镶黄旗| 册亨县| 五指山市| 分宜县| 达州市| 宁化县| 岚皋县| 阿克| 揭西县| 河间市| 卢湾区| 蚌埠市| 南昌县| 漳平市| 罗江县| 大姚县| 广汉市| 恩平市| 确山县| 新野县| 六安市| 松江区| 元阳县| 武义县| 涿鹿县| 阜康市| 昭通市| 佛山市| 棋牌| 乌鲁木齐市| 邹城市| 慈利县| 响水县| 武安市| 丹巴县| 沂源县| 高清| 周宁县| 武胜县|