當前位置:首頁 » 編程語言 » c語言中讀取和修改文件內容
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中讀取和修改文件內容

發布時間: 2023-07-22 15:45:10

『壹』 c語言如何實現對txt文件的讀取和寫入

使用fopen的r方式可以實現讀取,用w+方式可以實現寫入。
1.fopen的函數原型:FILE
*
fopen(const
char
*
path,const
char
*
mode);

fopen函數的第一個參數是文件路徑,第二個參數是打開方式,有以下幾種方式:
r
以只讀方式打開文件,該文件必須存在。
r+
以可讀寫方式打開文件,該文件必須存在。
rb+
讀寫打開一個二進制文件,允許讀數據。
rw+
讀寫打開一個文本文件,允許讀和寫。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
(原來的EOF符不保留)
wb
只寫打開或新建一個二進制文件;只允許寫數據。
wb+
讀寫打開或建立一個二進制文件,允許讀和寫。
wt+
讀寫打開或著建立一個文本文件;允許讀寫。
at+
讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+
讀寫打開一個二進制文件,允許讀或在文件末追加數據。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b
字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。

返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno中。
2.常式:
#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
char c;
int main(){
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"w"); //創建文件
if(NULL==fp) return -1;//要返回錯誤代碼
while(scanf("%c",&c)!=EOF) fprintf(fp,"%c",c); //從控制台中讀入並在文本輸出
fclose(fp);
fp=NULL;//需要指向空,否則會指向原打開文件地址
return 0;
}

『貳』 c語言實現文件讀取與寫入

樓下這個人真的裝,不會就算了還在這水,你還是去打鬥地主吧!
這個題簡單,用fgetc函數直接進行循環寫入就行了,話說貼主是湖工大的吧?這是實訓題,你還是自己打一下吧,下面是參考答案:
#include<stdlib.h>
#include<stdio.h>
void solve(){
FILE *fp1,*fp2;
fp1=fopen("a.txt","r");
fp2=fopen("b.txt","w");
char c;
c=fgetc(fp1);
while(c!=EOF)
{
fputc(c,fp2);
c=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}

『叄』 怎麼用C語言修改文件內容

1.fopen()

fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen實現三個功能:為使用而打開一個流,把一個文件和此流相連接,給此流返回一個FILR指針。

參數filename指向要打開的文件名,mode表示打開狀態的字元串,其取值如下:

字元串 含義

"r" 以只讀方式打開文件

"w" 以只寫方式打開文件

"a" 以追加方式打開文件

"r+" 以讀/寫方式打開文件,如無文件出錯

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

一個文件可以以文本模式或二進制模式打開,這兩種的區別是:在文本模式中回車被當成一個字元』\n』,而二進制模式認為它是兩個字元 0x0D,0x0A;如果在文件中讀到0x1B,文本模式會認為這是文件結束符,也就是二進制模型不會對文件進行處理,而文本方式會按一定的方式對數據作相應的轉換。

系統默認的是以文本模式打開,可以修改全部變數_fmode的值來修改這個設置,例如_fmode=O_TEXT;就設置默認打開方式為文本模式;而_fmode=O_BINARY;則設置默認打開方式是二進制模式。

我們也可以在模式字元串中指定打開的模式,如"rb"表示以二進制模式打開只讀文件,"w+t"或"wt+"表示以文本模式打開讀/寫文件。

此函數返回一個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);

5. 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,"%2d%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);

『肆』 C語言 修改文件中的數據

有三種方法可以實現,分別如下:

第1種、將文件中數據讀入內存中,修改後,清空源文件,存入新數據。

第2種、以讀寫的方式打開文件,將文件指針移動到要修改的地方,寫入新數據。新數據將會覆蓋掉舊數據。

第3種、以讀寫的方式打開文件,將文件指針定位到需要修改數據的末尾,然後刪除需要修改的數據(通過循環n次執行fputc(8,fp),直到清空需要修改的數據為止,8為退格鍵對應的ascii)。 然後計算需要加入的新數據長度,通過fputc(32,fp)來添加空格到文件中(32為空格鍵的ascii). 然後根據指針位置,填入數據覆蓋掉這些空格。

注意:第1種方法適合數據量較小的情況,第2種、第3種適合數據量較大的情況。

提供一個參考代碼,如下:

#include"stdio.h"
main()
{
FILE*in=fopen("f:\test.txt","r");
FILE*out=fopen("f:\back.txt","w");/*out是充當臨時文件作用*/
intch=0;
if(!in)
{
printf("cann'topentest.txt ");
exit(1);
}
if(!out)
{
printf("cann'tcreateback.txt ");
exit(1);
}
/*開始復制*/
while(!feof(in))
{
ch=fgetc(in);
if(ch=='a')ch='p';
fputc(ch,out);
}
fclose(in);fclose(out);
unlink("f:\test.txt");/*刪除test.txt*/
rename("f:\back.txt","test.txt");/*改名*/
printf("ok!!!!!! ");

}

『伍』 C語言程序設計 簡單的讀取文件並整理數據

首先還是先完整的學習一下文件打的所有方式。
文件的打開方式是由r,w,a,t,b,+,六個字元組成。如下:
「r」 只讀打開文件,如果文件不存在,返回一個錯誤.
「r+」 可讀寫打開文件,如果文件不存在,返回錯誤.
「w」 只寫打開文件,如果文件不存在,則創建一個新的文件,如果已經存在,將裡面的內容清空.
「w+」 可讀寫打開文件,如果文件不存在,創建新文件,如果已經存在,清空文件中的內容.
「a」 以追加寫入的方式打開文件(在文件未尾追加寫入數據) ,如果文件不存在,創建新文件.
「a+」 以可讀取並且可追加寫入的方式打開文件,如果不存在,創建新文件.
如果要指定打開文本文件,則在打開方式中加入』 t 『 字元.如果是二進制文件,則加入』 b 『 字元. 如下:

1

"rt" "rt+" "r+t" "rb" "rb+" "r+b"

當以追加方式打開文件時,文件的數據偏移指針會指向文件的最未尾,如果此時從文件讀入數據,可能會失敗,都已經文件未尾了,還有什麼數據要讀的?所以追加方式打開時,不要第一時間讀入數據.
注意: 如果想打開文件後,先讀取數據,然後再寫入,請不要用」w+」的方式,因為」w」方式會把已存在的文件的數據清空,所以會發生讀取錯誤.
基於上面介紹,我們這章要從一個文本文件中讀取數據,所以使用下面代碼打開文件:

1
2
3
4

FILE * fptr;
fptr = fopen( FILE_NAME , "rt" );
.....
fclose( fptr );

讀取文件的函數原型如下:

1
2

int fgetc( FILE* fstream);
char* fgets( char* buf , int n , FILE* fstream);

fgetc() 返回讀到的字元的ASCII碼.
在fgets()中,buf參數用來指定一個字元串指針來接收讀到的數據,參數n用來指定讀入的最大字元數.
fgets() 返回讀到的字元串指針.如果錯誤,返回NULL.
並且,我們可以用feof()函數來判斷是否已經讀到了文件的未尾.

1

int feof( FILE* fstream);

如果已經讀到文件未尾,feof()返回非0值(也就是TRUE值),如果沒有,返回0(FALSE);
學完了上面,我們現在准備一個data.txt文件,內容可以,也可以你喜歡的任何內容:

1
2
3

1234567890
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

請把data.txt文件與程序一起放在同一個文件夾,否則會有打開data.txt文件錯誤
然後編寫一個程序,代碼如下:

C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

/*
本程序中涉及到的fputc() 和 fputs()函數在上一章已經作了介紹,可自行查閱.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "data.txt" //文件名
#define BUFSIZE 27 //緩存的大小為27位元組
int main( int argc , char* argv[])
{
FILE *fptr;
char buf[BUFSIZE];
char ch;
fptr = fopen( FILENAME , "r+t");
if ( fptr == NULL )
{
puts( "open file error");
exit(1);
}
do{
ch = fgetc( fptr);
fputc(ch , stdout);
}while( ch != 'n' );//如果讀到換行符,就退出循環.
while( ! feof( fptr) ){//如果讀到文件未尾,就退出循環.
memset ( buf , 0 , BUFSIZE);
fgets( buf , BUFSIZE -1 , fptr );
//之所以要限制讀入的數據長度為BUFSIZE-1,因為buf字元串的最後一個字元必須為'',防止被讀入的數據覆蓋.
fputs( buf , stdout);
}
fclose( fptr);
getchar();//程序暫停,按下回車鍵後繼續
return 0 ;
}

把代碼復制到編譯環境中編譯後,把執行程序放在與data.txt相同的文件夾,然後運行,就會看到效果了.

『陸』 C語言怎麼修改文件信息

#include<stdio.h>

#include<stdlib.h>//文件操作函數頭文件

struct st{//定義一個結構體

char a[11];//301

char b[11];//01

char c[29];//xiaoming

char d[9];//m1

};

int main()

{

FILE *fp;//文件指針

fp=fopen("D:\123.txt","r+");//用fopen函數打開D盤下,名為123.txt的文件;

struct st s={"301","01","xiaoming","m"};//各成員的初值;

scanf("%s%s",s.c,s.d);//輸入之後會把原有的信息覆蓋掉;

fprintf(fp,"%s %s %s",s.a,s.b,s.c,s.d);//用fprintf函數將固定格式的數據寫入文件;

printf("%s %s %s %s",s.a,s.b,s.c,s.d);

fclose(fp);

return 0;

/*這樣就可以修改文件內容了,之前沒仔細看,沒看到是文件操作*/

}

『柒』 C語言如何實現對txt文件的讀取和寫入

1、使用VS新建空工程,直接點擊確定,如下所示。

『捌』 c語言中怎麼讀取文件中的字元並更改

流程如下:
1:fopen(old_file,"r");打開原文件
2:fopen(new_file,"w");建立臨時文件
3:使用fread或者其他你用著順手的函數讀取原文件內容
4:判斷是否到文件結尾,若是,則跳至第8步, 否則執行第5步
5:判斷讀取到的內容是否是你要修改的
6:若是,則修改後寫入臨時文件;若否, 則不做修改寫入臨時文件.
7:跳回第3步
8:關閉FILE指針
9刪除原文件, 將臨時文件重命名為原文件名.
結束.

『玖』 C語言如何操作excel文件

1.寫操作 第一步:單純C語言寫入Excel文件只能是 *.csv的後綴文件(是和txt一樣,以二進制文本形式存儲,它是以都逗號分隔符做個單元格內容的劃分, .xls存儲比較復雜, .csv文件可以可以通過...
2.讀操作 讀取文件 對於讀取Excel文件的操作,使用了文件隨機定位函數fseek(),它的一般調用格式如下: fseek...
3.最新補充 2018.08.28 由於經常有朋友告訴我運行結果是0 ,並將他們的工程發到我...