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

c語言基礎修改文件內容

發布時間: 2022-09-04 21:10:18

A. 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;

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

}

B. C語言怎麼修改文件內容

文本文件就是以二進制寫入和讀出的

所以樓上的方法完全可以使用

用fseek()函數定位文件指針

fwrite()寫入數據
完成本次修改

是完全可以用的

C. 怎麼用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);

D. c語言怎麼做到對文件中的內容進行更改或刪除塊寫入和讀取怎麼使用定義結構體數組怎麼用

1、刪除文件部分內容的大概步驟:新建一個臨時文件,把原文件內容向臨時文件里拷貝,遇到要刪除的內容就跳過。結束後關閉文件,用remove("原文件名");把原文件刪除,用rename("臨時文件名","原文件名");把臨時文件名改為原文件名。

2、例如在原文件123.txt中刪除以2和以4編號開頭的行,可用以下代碼實現:
#include "stdio.h"
#include "stdlib.h"
int main(void){
FILE *fin,*ftp;
char a[1000];
fin=fopen("123.txt","r");//讀打開原文件123.txt
ftp=fopen("tmp.txt","w");//寫打開臨時文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n");
exit(0);
}
while(fgets(a,1000,fin))//從原文件讀取一行
if(a[0]!='2' && a[0]!='4')//檢驗是要刪除的行嗎?
fputs(a,ftp);//不是則將這一行寫入臨時文件tmp.txt
fclose(fin);
fclose(ftp);
remove("123.txt");//刪除原文件
rename("tmp.txt","123.txt");//將臨時文件名改為原文件名
return 0;
}

E. 在c語言中,怎麼修改文件中相關數據信息

三種方法:
(1)將文件中數據讀入內存中,修改後,清空源文件,存入新數據。
(2)以讀寫的方式打開文件,將文件指針移動到要修改的地方,寫入新數據。新數據將會覆蓋掉舊數據。
(3)以讀寫的方式打開文件,將文件指針定位到需要修改數據的末尾,然後刪除需要修改的數據(通過循環n次執行fputc(8,fp),直到清空需要修改的數據為止.
8為退格鍵對應的ascii)。
然後計算需要加入的新數據長度,通過fputc(32,fp)來添加空格到文件中(32為空格鍵的ascii).
然後根據指針位置,填入數據覆蓋掉這些空格。
第一種方法適合數據量較小的情況,
後兩種情況適合數據量較大的情況,但程序寫起來麻煩,如果用心寫代碼,也用不了多久。呵呵。

F. 怎樣在c語言中修改已錄入的文件信息,謝謝

用FILE定義文件指針
FILE
*fp;
fp=fopen("文件名","a");//往原文件追加數據
fp=fopen("文件名","w");//重建文件,採用這種方式之前你應該將原文件中的數據都存儲到內存中
操作完畢後應該用fclose(fp);關閉文件,否則會丟失數據

G. c語言中如何對文件中的某些數據進行修改

如果文件較短,可以全部讀到內存,修改後寫入文件。
如果文件很大,沒有好辦法,只能在新文件中寫入原文件修改的內容,然後刪除原來的文件,重新命名。

H. C語言怎麼修改文件內容

先一組一組數據讀取,然後進行比較,看是不是要修改的數據(如果是要修改的數據,那此時文件的指針已經指向下一組數據了),然後用fseek(fp,-sizeof(type),SEEK_CUR);使文件指針指向該數據塊(fp為文件指針,sizeof(type)為數據長度,type是指定,可以換成需要的數據類型,比如int或是struct等)。

I. 如何用C語言文件操作修改指定文件

一個c語言讀寫文件程序:
#include
"stdio.h"
#include
main()
{
file
*fp1;//定義文件流指針,用於打開讀取的文件
file
*fp2;//定義文件流指針,用於打開寫操作的文件
char
text[1024];//定義一個字元串數組,用於存儲讀取的字元
fp1
=
fopen("d:\\a.txt","r");//只讀方式打開文件a.txt
fp2
=
fopen("d:\\b.txt","w");//寫方式打開文件a.txt
while(fgets(text,1024,fp1)!=null)//逐行讀取fp1所指向文件中的內容到text中
{
puts(text);//輸出到屏幕
fputs(text,fp2);//將內容寫到fp2所指向文件中
}
fclose(fp1);//關閉文件a.txt,有打開就要有關閉
fclose(fp2);//關閉文件b.txt
}

J. 怎麼用C語言對文件操作用特定內容替換其中某些內容

如果只想修改文件一部分。
可以使用函數int fseek( FILE *stream, long offset, int origin );來定位你的文件指針。
文件指針的位置決定你讀寫文件的起始位置。
其中參數origin :表示從哪裡開始偏移,值有:
SEEK_SET: 文件開頭
SEEK_CUR: 當前位置
SEEK_END: 文件結尾
參數offset:表示偏移的位元組數,正數表示正向偏移,負數表示負向偏移。
比如
你先讀取文件內容,同時做判斷,找到你要改的內容時,調用函數
fseek(fp,10L,SEEK_CUR);把文件指針移動到離當前指針位置10個位元組的地方(我們假設當前位置偏移10個位元組就是你要修改的起始位置);
這樣你之後的讀寫都是從這個位置開始。
不過要注意的是,你從這位置開始寫新的內容,可以覆蓋原內容,所以如果新的內容比你想覆蓋的內容長的話,會把後面你想保留的內容也覆蓋掉。
這種思路,你想要實現修改指定內容,還需要把修改內容之後的數據也讀出來備份,再一起寫進去。
所以最簡單,還是直接生成新的文件替換原文件。