檔案的讀寫
/*將0-127之間的ASCII字元寫到檔案中,
然後從檔案中讀出並顯示到螢幕上*/
#include<stdio.h>
#include<stdlib.h>
main()
{ FILE *fp;
char ch;
int i;
if((fp=fopen("奇異博士.doc","wb"))==NULL)/*以二進位制寫的方式開啟檔案*/
{ printf("File open 奇異博士.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
for(i=0;i<128;i++)
{ fputc(i,fp);/*將ASCII值在0-127之間的所有字元寫入檔案*/
}
fclose(fp);
if((fp=fopen("奇異博士.doc","rb"))==NULL)/*以二進位制讀的方式開啟檔案*/
{ printf("File open 奇異博士.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
while((ch=fgetc(fp))!=EOF)/*從檔案中讀取字元直到檔案末尾*/
{ putchar(ch);/*在顯示器上顯示從檔案讀出的所有字元*/
}
fclose(fp);
}
執行結果:
將上述結果比較奇異博士.doc 裡的檔案的內容:
為什麼在螢幕上顯示的字元與奇異博士.doc 文件裡看到的內容不一致?
21-23行通過檢查fgetc()的返回值是否為EOF來判斷是否讀到了檔案末尾,若讀到了檔案的末尾,則返回EOF,即-1.
除此之外,還可以使用函式feof()來判斷是否讀到檔案末尾。因此,將21-23行
做如下修改:
ch=fgetc(fp);
while(!feof(fp))
{ putchar(ch);
ch=fgetc(fp);
}
函式feof()用於是否到達檔案末尾。當檔案位置指標指向檔案結束符時(EOF,全稱End-of-file Indicator),返回非0值,否則返回0。
修改上述程式,將ASCII值在0-127之間的字元寫到磁碟檔案上,然後從檔案中讀取這些字元時,判斷讀出的字元是否為可列印字元,若是則直接將字元顯示到螢幕上,否則將該字元的十進位制ASCII值相識到螢幕上。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
main()
{ FILE *fp;
char ch;
int i;
if((fp=fopen("奇異博士.doc","wb"))==NULL)/*以二進位制寫的方式開啟檔案*/
{ printf("File open 奇異博士.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
for(i=0;i<128;i++)
{ fputc(i,fp);/*將ASCII值在0-127之間的所有字元寫入檔案*/
}
fclose(fp);
if((fp=fopen("奇異博士.doc","rb"))==NULL)/*以二進位制讀的方式開啟檔案*/
{ printf("File open 奇異博士.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
while((ch=fgetc(fp))!=EOF)/*從檔案中讀取字元直到檔案末尾*/
{ if(isprint(ch))/*包含在<ctype.h>。 判斷是否是可列印字元*/
printf("%c\t",ch);/*若是可列印字元,則顯示該字元*/
else
printf("%d\t",ch);/*若非可列印字元,則顯示該字元的ASCII值*/
}
fclose(fp);
}
讀寫檔案中的字串
從檔案中讀取字串可以用函式fgets()
用函式fgets()來改寫上述案例。從鍵盤輸入一串字元,然後把它們新增到文字檔案“美國隊長.doc”的末尾。假設文字檔案美國隊長.doc中已有內容為:我是美隊。
文字檔案美國隊長.doc中已有內容為:我是美隊的程式碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define N 80
main()
{ FILE *fp;
char str[N];
if((fp=fopen("美國隊長.doc","w"))==NULL)/*判斷檔案是否成功開啟*/
{ printf("File open 美國隊長.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
gets(str); /*從鍵盤讀入一個字串*/
fputs(str,fp);/*將字串str寫入fp所指的檔案中*/
fclose(fp);
if((fp=fopen("美國隊長.doc","r"))==NULL)/*以讀的方式開啟檔案*/
{ printf("File open 美國隊長.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
fgets(str,N,fp);/*從fp所指的檔案中讀出字串,最多讀N-1個字元*/
puts(str); /*將字串顯示在螢幕上*/
fclose(fp);
}
接下來演示對 美國隊長.doc 的內容進行追加:
每執行一次程式,美國隊長.doc 的內容都會追加。為什麼?
因為第十行是以新增的方式開啟 美國隊長.doc 的。因此,每次執行程式時從鍵盤輸入的字串都會被新增到 美國隊長.doc 的末尾。
看看第二次新增的現象:
怎麼樣?是不是在第一次內容的基礎上又新增了一次內容?說明上述分析的邏輯是正確的。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define N 80
main()
{ FILE *fp;
char str[N];
if((fp=fopen("美國隊長.doc","a"))==NULL)/*以新增的方式開啟文字檔案*/
{ printf("File open 美國隊長.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
gets(str); /*從鍵盤讀入一個字串*/
fputs(str,fp);/*將字串str寫入fp所指的檔案中*/
fclose(fp);
if((fp=fopen("美國隊長.doc","r"))==NULL)/*以讀的方式開啟檔案*/
{ printf("File open 美國隊長.doc error !\n");
exit(0);//表示終止程式執行 。包含在<stdlib.h>
}
fgets(str,N,fp);/*從fp所指的檔案中讀出字串,最多讀N-1個字元*/
puts(str); /*將字串顯示在螢幕上*/
fclose(fp);
}
相關文章
- 普通檔案的讀寫
- 檔案排版(文字檔案讀寫)
- Python中的檔案讀寫Python
- Golang 讀、寫檔案Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- keras讀寫檔案Keras
- 「Python」:檔案讀寫Python
- python config配置檔案的讀寫Python
- python讀寫excel檔案PythonExcel
- C++讀寫檔案C++
- python檔案讀寫操作Python
- C++檔案讀寫C++
- VBA建立文字檔案、讀寫文字檔案
- Python中的檔案的讀寫操作Python
- Python中檔案的讀寫、寫讀和追加寫讀三種模式的特點Python模式
- Python中讀寫Parquet檔案的方法Python
- csv檔案的寫入和讀取
- 讀取檔案流並寫入檔案流
- Python:讀寫檔案(I/O) | 組織檔案Python
- nodejs xmlreader 讀寫xml檔案NodeJSXML
- C++檔案讀寫操作C++
- Golang對檔案讀寫操作Golang
- Java 字元流檔案讀寫Java字元
- C語言-檔案讀寫C語言
- Perl讀寫檔案&字串操作字串
- Python 檔案讀寫(Python IO)Python
- c風格讀寫檔案
- java 讀寫 ini 配置檔案Java
- C/C++ 檔案讀寫C++
- C++讀寫檔案操作C++
- C#讀取文字檔案和寫文字檔案C#
- Python中的檔案讀寫-實際操作Python
- Python檔案讀寫、StringIO和BytesIOPython
- Perl IO:隨機讀寫檔案隨機
- 使用POI讀寫word docx檔案
- 使用C#讀寫ini檔案C#
- 使用C#讀寫xml檔案C#XML