求c語言讀取寫入文字檔案的函式實現

時間 2021-09-17 08:38:04

1樓:go陌小潔

c語言標準庫提供了一系列檔案i/o函式用於檔案操作,比如fopen()用於開啟檔案、fread()、fwrite()用於讀寫檔案、fseek()用於設定操作位置等等,一般c語言教程上都有檔案i/o一章,細緻內容,可以找本教科書學習一下。 下面的示例,是向名為1.txt的檔案附加hello world字串。

#include

#include

int main()

fseek(fp, 0, seek_end);

char sz_add = "hello world\n";

fwrite(sz_add, strlen(sz_add), 1, fp);

fclose(fp);

return 0;}或

#include

struct stu

boya[2],boyb[2],*pp,*qq;

main()

printf("\ninput data\n");

for(i=0;i<2;i++,pp++)

scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);

pp=boya;

for(i=0;i<2;i++,pp++)

fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp->addr);

rewind(fp);

for(i=0;i<2;i++,qq++)

fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr);

printf("\n\nname\tnumber age addr\n");

qq=boyb;

for(i=0;i<2;i++,qq++)

printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,qq->addr);

fclose(fp);}

2樓:莊政警

#include

#include //strlen()

#include //malloc()

int filecreate(char *filepath,char *filecontext)

return 1;

}char* fileread(char *filepath)return null;

} int main()      //測試

關於c語言檔案寫入讀取函式的問題 謝謝

3樓:匿名使用者

fread(&n,4,1,fp); //這個是對的,但要在32位環境下,通用的方式可以這樣

fread(&n,sizeof(n), 1, fp);

fprintf(fp,"%d",&n);(這裡要不要地址符&呀)不要 &

如果是陣列char str[20]:

fread(str,4,1,fp); //如果你想儲存陣列內容,應該這樣

fread(str, sizeof(str), 1, fp); //sizeof(str) = 20;

在fscanf和fprintf 針對陣列都不用 &

4樓:匿名使用者

你應該是對檔案讀寫函式和指標不太瞭解。

簡單介紹一下。

//主要用於以二進位制方式讀入資料,構建變數。

size_t fread ( void * ptr, size_t size, size_t count, file * stream );

//將變數儲存到檔案中,待之後恢復。

size_t fwrite ( const void * ptr, size_t size, size_t count, file * stream );

fscanf(); //需要知道變數的地址,才能改變變數的值。因此必需將變數地址傳給它。

fprintf(); //對於基本型別,使用的是值傳遞方式來傳參;將變數複製給fprintf即可。

//對於字元陣列,因為不能直接複製,所以使用引用傳遞方式;即傳陣列首地址。

5樓:

fprintf和printf是一樣的用法。只不過前者用於寫檔案,後者用於寫螢幕而已!

6樓:匿名使用者

檔案的輸入輸出函式

鍵盤、顯示器、印表機、磁碟驅動器等邏輯裝置, 其輸入輸出都可以通過檔案管理的方法來完成。而在程式設計時使用最多的要算是磁碟檔案, 因此本節主要以磁碟檔案為主, 詳細介紹c語言、c++提供的檔案操作函式, 當然這些對檔案的操作函式也適合於非磁碟檔案的情況。

另外, c語言提供了兩類關於檔案的函式。一類稱做標準檔案函式也稱緩衝型檔案函式, 這是ansi標準定義的函式; 另一類叫非標準檔案函式, 也稱非緩衝型檔案函式。這類函式最早公用於unix作業系統, 但現在ms-dos3.

0 以上版本的作業系統也可以使用。下面分別進行介紹。

標準檔案函式

標準檔案函式主要包括檔案的開啟、關閉、讀和寫等函式。不象basic 、 fortran語方有順序檔案和隨機檔案之分, 在開啟時就應按不同的方式確定。 c語言並不區分這兩種檔案, 但提供了兩組函式, 即順序讀寫函式和隨機讀寫函式。

一、檔案的開啟和關閉

任何一個檔案在使用之前和使用之後, 必須要進行開啟和關閉, 這是因為作業系統對於同時開啟的檔案數目是有限制的, dos作業系統中,

可以在device .sys中定義允許同時開啟的檔案數n(用files=n定義)。其中n 為可同時開啟的檔案數, 一般n<=20。

因此在使用檔案前應開啟檔案, 才可對其中的資訊進行存取。用完之後需要關閉,

否則將會出現一些意想不到的錯誤。c提供了開啟和關閉檔案的函式。

1. fopen()函式

fopen函式用於開啟檔案, 其呼叫格式為:

file *fopen(char *filename, *type);

在介紹這個函式之;前, 先了解一下下面的知識。

(1) 流(stream)和檔案(file)

流和檔案 在turbo c2.0中是有區別的, turbo c2.0 為程式設計者和被訪問的裝置之間提供了一層抽象的東西, 稱之為"流", 而將具體的實際裝置叫做檔案。

流是一個邏輯裝置, 具有相同的行為。因此, 用來進行磁碟檔案寫的函式也同樣可以用來進行印表機的寫入。在turbo c2.

0中有兩種性質的流: 文字流( text stream)和二進位制(binary stream)。對磁碟來說就是文字檔案和二進位制檔案。

本軟體為了便於讓讀者易理解turbo c2.0語言而沒有對流和檔案作特別區分。

(2) 檔案指標file

實際上file是一個新的資料型別。它是turbo c2.0的基本資料型別的集合, 稱之為結構指標。

有關結構的概念將在第四節中詳細介紹, 這裡只要將file理解為一個包括了檔案管理有關資訊的資料結構, 即在開啟檔案時必須先定義一個檔案指標。

(3) 以後介紹的函式呼叫格式將直接寫出形式引數的資料型別和函式返回值的資料型別。例如: 上面開啟檔案的函式, 返回一個檔案指標, 其中形式引數有兩個, 均為字元型變數(字串陣列或字串指標)。

本軟體不再對函式的呼叫格式作詳細說明。

現在再來看開啟檔案函式的用法。

fopen()函式中第一個形式參數列示檔名, 可以包含路徑和檔名兩部分。如:

"b:test.dat" "c:\\tc\\test.dat"

如果將路徑寫成"c:\tc\test.dat"是不正確的, 這一點要特別注意。

第二個形式參數列示開啟檔案的型別。關於檔案型別的規定參見下表。

表 檔案操作型別

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

字元 含義

────────────────────────────

"r" 開啟文字檔案只讀

"w" 建立文字檔案只寫

"a" 增補, 如果檔案不存在則建立一個

"r+" 開啟一個文字檔案讀/寫

"w+" 建立一個文字檔案讀/寫

"a+" 開啟或建立一個檔案增補

"b" 二進位制檔案(可以和上面每一項合用)

"t" 文這檔案(預設項)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

如果要開啟一個ccdos子目錄中, 檔名為clib的二進位制檔案, 可寫成:

fopen("c:\\ccdos\\clib", "rb");

如果成功的開啟一個檔案, fopen()函式返回檔案指標, 否則返回空指標 (null)。由此可判斷檔案開啟是否成功。

2. fclose()函式

fclose()函式用來關閉一個由fopen()函式開啟的檔案 , 其呼叫格式為:

int fclose(file *stream);

該函式返回一個整型數。當檔案關閉成功時, 返回0, 否則返回一個非零值。可以根據函式的返回值判斷檔案是否關閉成功。

例10:

#iclude

main()

二、有關檔案操作的函式

本節所講的檔案讀寫函式均是指順序讀寫, 即讀寫了一條資訊後, 指標自動加1。下面分別介紹寫操作函式和讀操作函式。

1. 檔案的順序寫函式

fprintf()、fputs()和fputc()函式

函式fprintf()、fputs()和fputc()均為檔案的順序寫操作函式, 其呼叫格式如下:

int fprintf(file *stream, char *format, );

int fputs(char *string, file *steam);

int fputc(int ch, file *steam);

上述三個函式的返回值均為整型量。fprintf() 函式的返回值為實際寫入檔案中的字罕個數(位元組數)。如果寫錯誤, 則返回一個負數, fputs()函式返回0時表明將string指標所指的字串寫入檔案中的操作成功, 返回非0時, 表明寫操作失敗。

fputc()函式返回一個向檔案所寫字元的值, 此時寫操作成功, 否則返回eof(檔案結束結束其值為-1, 在stdio.h中定義)表示寫操作錯誤。

fprintf( ) 函式中格式化的規定與printf( ) 函式相同, 所不同的只是 fprintf()函式是向檔案中寫入。而printf()是向螢幕輸出。

下面介紹一個例子, 執行後產後一個test.dat的檔案。

例11:

#include

main()

用dos的type命令顯示test.dat的內容如下所示:

螢幕顯示

your score of toefl is: 617

that's good news

2. 檔案的順序讀操作函式

fscanf()、fgets()和fgetc()函式

函式fscanf()、fgets()和fgetc()均為檔案的順序讀操作函式, 其呼叫格式如下:

int fscanf(file *stream, char *format, );

char fgets(char *string, int n, file *steam);

int fgetc(file *steam);

fscanf()函式的用法與scanf()函式相似, 只是它是從檔案中讀到資訊。 fscanf()函式的返回值為eof(即-1), 表明讀錯誤, 否則讀資料成功。fgets()函式從檔案中讀取至多n-1個字元(n用來指定字元數), 並把它們放入string指向的字串中, 在讀入之後自動向字串未尾加一個空字元, 讀成功返回string指標, 失敗返回一個空指標。

fgetc()函式返回檔案當前位置的一個字元, 讀錯誤時返回eof。

下面程式讀取例11產生的test.dat檔案, 並將讀出的結果顯示在螢幕上。

例12#include

main()

執行後螢幕顯示:

your score of toefl is: 617

that's good news

如果將上例中fscanf(fp, "%d", &i)改為fscanf(fp, "%s", m),

再將其後的輸出語句改為printf("%s", m), 則可得出同樣的結果。由此可見turbo c2. 0 中只要是讀文字檔案,

則不論是字元還是數字都將按其ascii值處理。 另外還要說明的一點就是fscanf()函式讀到空白符時, 便自動結束, 在使用時要特別注意。

4. feof()和rewind()函式

這兩個函式的呼叫格式為:

int feof(file *stream);

int rewind(file *stream);

feof()函式檢測檔案位置指示器是否到達了檔案結尾, 若是則返回一個非0 值, 否則返回0。這個函式對二進位制檔案操作特別有用, 因為二進位制檔案中, 檔案結尾標誌eof也是一個合法的二進位制數, 只簡單的檢查讀入字元的值來判斷檔案是否結束是不行的。如果那樣的話,可能會造成檔案未結尾而被認為結尾, 所以就必須有feof()函式。

下面的這條語句是常用的判斷檔案是否結束的方法。

while(!feof(fp))

fgetc(fp);

while為迴圈語句, 將在下面介紹。

rewind()函式用於把檔案位置指示器移到檔案的起點處, 成功時返回0, 否則, 返回非0值。

非標準檔案函式

這類函式最早用於unix作業系統, ansi標準未定義, 但有時也經常用到, dos 3.0以上版本支援這些函式。它們的標頭檔案為io.h。

一、檔案的開啟和關閉

1. open()函式

open()函式的作用是開啟檔案, 其呼叫格式為:

int open(char *filename, int access);

該函式表示按access的要求開啟名為filename的檔案, 返回值為檔案描述字, 其中access有兩部分內容: 基本模式和修飾符, 兩者用" "("或")方式連線。修飾符可以有多個, 但基本模式只能有一個。

open()函式開啟成功, 返回值就是檔案描述字的值(非負值), 否則返回-1。

2. close()函式

close()函式的作用是關閉由open()函式開啟的檔案, 其呼叫格式為:

int close(int handle);

該函式關閉檔案描述字handle相連的檔案。

關於c語言中文字檔案的逐行讀取的實現

小夏在深圳 若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。include main file fp fp fopen noe...

c中如何讀取文字檔案的最後一行

兩種方法 一行一行讀,讀到檔案尾,你就知道哪行是最好一行了。可以考慮使用system.io.file.readalllines 方法,返回值是字串陣列。file.readalllines 方法 system.io https 從流的末尾一個位元組一個位元組往前讀,讀到換行符以後,再從這個位置讀到檔案...

python 讀取文字檔案 刪除裡邊的空行

趣園藝 def delblankline infile,outfile delete blanklines of infile infp open infile,r outfp open outfile,w lines infp.readlines for li in lines if li.spl...