㈠ C語言中如何創建文件並給文件中寫入內容
#include<stdlib.h>
1,鏈表版本
typedefstructnode
{
charname[20];
intnumber;
structnode*next;
}N1;
voidsave_data(N1*h)
{
N1*hed=h;
FILE*fspointer;
fspointer=fopen("student1.txt","w+");
if(hed->next==NULL)
return;
if(fspointer==NULL)
return;
hed=hed->next;
while(hed!=NULL)
{
fprintf(fspointer,"%s %d ",hed->name,hed->number);
hed=hed->next;
}
fclose(fspointer);
}
2,數組版本
voidsave_data(intarr[],intnum)//num,數組元素數量
{
inti;
FILE*fspointer;
fspointer=fopen("student1.txt","w+");
if(fspointer==NULL)
return;
for(i=0;i<num;i++)
fprintf(fspointer,"%d",arr[i]);
fclose(fspointer);
}
㈡ 怎麼用C語言在一個文件後面添加內容
怎麼用C語言在一個文件後面添加內容
使用fopen函數打開文件,用fseek函數將文件位置調整到文件末尾,然後用fwrite函數寫入數據即可。下面的示例代碼,向1.txt的文件中追加hello world的字元串。
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp = fopen("1.txt", "a+");
if (fp==0) { printf("can't open file\n"); return 0;}
fseek(fp, 0, SEEK_END);
char sz_add[] = "hello world\n";
fwrite(sz_add, strlen(sz_add), 1, fp);
fclose(fp);
return 0;
}
㈢ 關於C語言中用fopen創建TXT的問題
有的
定義函數
FILE
*
fopen(const
char
*
path,const
char
*
mode);
函數說明
參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r
打開只讀文件,該文件必須存在。
r+
打開可讀寫的文件,該文件必須存在。
rb+
讀寫打開一個二進制文件,只允許讀寫數據。
rt+
讀寫打開一個文本文件,允許讀和寫。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
wb
只寫打開或新建一個二進制文件;只允許寫數據。
wb+
讀寫打開或建立一個二進制文件,允許讀和寫。
wt+
讀寫打開或著建立一個文本文件;允許讀寫。
at+
讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+
讀寫打開一個二進制文件,允許讀或在文件末追加數據。
以上都是網路里有的,我雖然知道不過也記不得這么全。你逐條看看,用的時候再記就可以
比如
fp=fopen("d:\\mytxt.txt","a+")就是追加類型的
㈣ C語言裡面文件fopen函數有個追加方式打開文件,什麼是追加方式呢
追加就是在原有數據的後面繼續添加數據。
文件主名和擴展名可以使用的字元是:內
英文容字母:A—z(大小寫等價)
數 字:0—9
漢 字
特殊符號:$#&@()-[]^~等。
各種控制字元和下列字元不能用在文件名中:< > / \ | : " * ? //這些字元已做它用
文件名字母大小寫的區分:
DOS下文件名不區分大小寫。
在Windows系統下,顯示區分大小寫,讀寫操作時不區分。
在類Unix/Linux系統下,區分字母大小寫。
文件名長度的限制:
DOS下文件名長度應為 8.3 即8位文件名3位擴展名。
在Windows系統下,可以多個擴展名,以最後一個為准,文件名長度255。
在類Unix/Linux系統下,文件名長度255,帶路徑的長度1024,也有系統4096。
文件名可以直接寫進去函數里,也可以放在變數里:
FILE *fp;
char namein[]="abc.txt";
fp=fopen(namein,"r");
或 fp=fopen("abc.txt","r");
文件名若帶路徑,單反斜杠要寫成雙反斜杠,例如:
char namein[]="C:\\path\\abc.txt";
㈤ C++ 如何用創建txt文件,並且寫入內容
FILE *fp = fopen("1.txt","w"); //這一行代表創建txt文件
fprintf(fp,"abc\n"); //這一行代表寫入內容
㈥ 調用fopen函數打開一文本文件,在"使用方式"這一項中,為追加而打開需填入什麼
通常填入「附加」;另外還可以使用「a+」來讀和寫更新。該文件已更新為「r+」讀和寫更新。將更新寫入「w+」。
一、fopen函數在當前目錄中打開一個文件,調用的一般形式是:
文件指針名稱=fopen(文件名,文件模式);
「文件指針名稱」必須聲明為指向文件類型的指針[1];
「文件名」是打開文件的文件名;
「文件模式」是指文件的類型和操作要求;
「文件名」是字元串常量或字元數組。
二、「R」=「rt」打開一個必須存在且只讀的文本文件。
"R +" = "rt +"打開一個必須存在並允許讀寫的文本文件。
「Rb」打開一個必須存在且只讀的二進制文件。
「Rb +」打開一個必須存在的二進制文件,允許讀和寫。
三、「W」=「wt」創建一個新的文本文件,現有的文件將被刪除,只允許寫入。
"W +" = "wt +"創建一個新的文本文件。現有文件將被刪除,並允許閱讀和寫入。
四、「白平衡」創建一個新的二進制文件,現有的文件將被刪除,只允許寫入。
㈦ 關於利用fopen函數創建文件的問題
函數原型:FILE * fopen(const char * path,const char * mode);
相關函數:open,fclose,fopen_s,_wfopen
返回值:文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
參數說明:
參數path字元串包含欲打開的文件路徑及文件名,參數mode字元串則代表著流形態。
mode有下列幾種形態字元串:
r 以只讀方式打開文件,該文件必須存在。
r+ 以可讀寫方式打開文件,該文件必須存在。
rb+ 讀寫打開一個二進制文件,允許讀寫數據,文件必須存在。
w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個二進制文件;只允許寫數據。
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫。
ab+ 讀寫打開一個二進制文件,允許讀或在文件末追加數據。
wx 創建文本文件,只允許寫入數據.[C11]
wbx 創建一個二進制文件,只允許寫入數據.[C11]
w+x 創建一個文本文件,允許讀寫.[C11]
wb+x 創建一個二進制文件,允許讀寫.[C11]
w+bx 和"wb+x"相同[C11]
例子:
#include<stdio.h>
#defineF_PATH"d:\myfile\file.dat"
intmain(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp)
{
return-1;//要返回錯誤代碼
}
fclose(fp);
fp=NULL;//需要指向空,否則會指向原打開文件地址
return0;
}
㈧ c++中fopen函數讀文件怎麼用文件數據
本文分別簡單講述了如何利用C和C++庫函數對文件的讀寫,涵蓋了常用的文件操作函數。網上關於C/C++文件操作的介紹的博客很多,所以本文也大同小異,也主要是做一個備忘,不有每次都網路了。但本文重點在於幾個庫函數的運用,而不是從文件的屬性或分類開始。x0dx0a一、C文件操作:x0dx0a C語言中,文件的操作都是通過一個FILE類型的文件指針進行,也就是說只有通過文件指針,才能調用相應的文件。FILE是一個由系統定義的結構體(定義在stdio.h中),可以存放文件的相關信息。x0dx0a文件的打開(fopen函數)x0dx0a 文件的操作過程一般為:打開 => 讀/寫 => 關閉。x0dx0afopen函數的原型如下:x0dx0a FILE* fopen(const char* filename, const char* mode); x0dx0a函數調用就比較簡單了:x0dx0a FILE* fp;x0dx0a fp = fopen("file1.txt", "r");x0dx0a如果打開成功,返回file1.txt文件的指針,如果打開失敗,返回一個NULL指針,所以調用fopen()後我們需要檢查fp的值才進行下一步操作。fopen()的第一個參數為文件名,第二個參數為文件打開方式,含義如下表:x0dx0a說明: 1. 使用"r"時,如果文件不存在,則出錯。x0dx0a 2. 使用"w"時,如果沒有文件,則創建一個新文件。x0dx0a 3. 使用"a"時,如果希望向文件尾添加數據,則該文件必須存在,否則出錯。x0dx0a 4. "r+","w+","a+"都是可以輸入和輸出數據,但必須遵守上述3點x0dx0a 5. 操作二進制文件時,加上"b"字元,且二進制文件對換行符不會進行轉換,而文本文件會將換行符轉換為回車和換行兩個字元。x0dx0a文件的關閉(fclose函數)x0dx0a 在使用完一個文件後,若不關閉則會造成系統資源泄漏。使用fclose()關閉文件即可,原型為 int fclose(FILE* fp)。使用:fclose(fp); flose()返回0時為順利關閉文件,否則返回EOF(-1)。x0dx0a文件的讀寫x0dx0a 1) fputc(), fgetc()分別為從文件流中寫和讀一個字元,原型分別如下:x0dx0a 寫:int fputc(int c, FILE* fp); 讀:int fgetc(FILE* fp); 失敗時均返回EOFx0dx0a 2) fputs(), fgets()分別為從文件流中寫和讀一個字元串,原型分別如下:x0dx0a 寫:int fputs(const char* str, FILE* fp); 例如: fputs("I love this game!", fp);x0dx0a 讀:char* fgets(char* str, int n, FILE* fp); 從流中讀取n-1個字元或讀完一行,參數str用於接收讀取的字元串。注意當讀取一行時,不包括行尾的'\n'字元。x0dx0a 3) fseek() 一般用於二進制模式打開的文件中,功能是定位到流中指定的位置。原型如下:x0dx0a int fseek(FILE* fp, lont offset, int whence); 參數offset是移動的字元數,whence是移動的基準,取值是:x0dx0a SEEK_SET 0 //文件開頭 x0dx0a SEEK_CUR 1 //當前讀寫的位置 x0dx0a SEEK_END 2 //文件尾部 x0dx0a 4) fprintf(),fscanf()是將數據按格式輸出輸入到文件流中,用法類似printf()和scanf()。原型分別如下:x0dx0a int fprintf(FILE* fp, const char* format, ...); 它與printf()不同的就是將數據寫到了文件流中,而不是控制台罷了。x0dx0a int fscanf(FILE* fp, cosnt char* format, ...); 從文件流中按格式讀取,與scanf()不同的就是數據是從文件流中讀取而已。x0dx0a 例如: fprintf(fp, "count=%d", 5); fscanf(fp, "%d", &x);x0dx0a 5) feof()是檢測是否已到文件尾,是返回真,否則返回0,原型是 int feof(FILE* fp);x0dx0a 6) rewind() 則是把當前的讀寫位置回到文件開始,相當於 fseek(fp, 0L, SEEK_SET); 原型: void rewind(FILE* fp);x0dx0a 7) remove() 刪除文件,原型: int remove(const char* filename); 參數為要刪除的文件名,成功則返回0;x0dx0a 8) fread(), fwrite() 它們相當於可將一塊的數據讀出或寫入,相當的方便。原型如下:x0dx0a size_t fread(void* ptr, size_t size, size_t n, FILE* fp); 從流中讀指定個數的字元,size是每塊的位元組婁,n則是讀取的塊數。x0dx0a size_t fwrite(const void* ptr, size_t size, size_t n, FILE* fp); 類似的是向文件流中寫入n塊size位元組數的數據。可以看到數據指針為void*型,即可以使用任何類型的指針來替換。例如:x0dx0a現在一個結構體: struct student_t{char name[16]; int id; int age;}; 創建三個學生的數據並賦值:struct student_t stu[3];x0dx0a這時,當我們找開文件後(一般是進制模式),可以調用fwrite()將三個學生的數據都寫入到文件中,兩種方式:x0dx0a for(int i = 0; i < 3; ++i)x0dx0a fwrite(&stu[i], sizeof(struct student_t), 1, fp); x0dx0a 或者:fwrite(stu, sizeof(struct student_t), 3, fp);x0dx0a些時,我們調用fread()函數便可很輕松的將剛才寫入的3個學生的數據讀取出來:x0dx0a struct student_t stus[3];x0dx0a for(int i = 0; i < 3; ++i)x0dx0a fread(&stus[i], sizeof(struct student_t), 1, fp);x0dx0a 或者:fread(stus, sizeof(struct student_t), 3, fp); 這樣便可將三個學生的數據讀入到stus變數中了(有木有很方便吶)x0dx0a注意:如果你發現使用fread()讀取之後,最後一個學生讀取的數據不完全,可能是由於你沒有使用二進制模式打開的原因。x0dx0a 9) 最後是tmpfile()和tmpnam(),前者為生成一個臨時文件,後者為生成一個唯一的文件名,具體使用在此不介紹了。x0dx0a二、使用C++中的fstream文件流操作類進行文件的讀寫x0dx0a 使用fstream操作文件與使用C庫函數類似,只不過fstream為面向對象方式,或多了上些C++的特性。首先,這里大概有三個流:x0dx0afstream為文件輸入輸出流,ifstream為輸入文件流,ofstream為輸出文件流,它們與ostream不同的就流的目的地為文件,而不是控制台。這里只介紹與上述的一些不同點:x0dx0a 1. 打開文件,如可以是 ifstream input_file("file2.txt"); 這樣將會以默認方式打開file2.txt文件並進行讀取。也可使用open()方式打開一個文件,並指定打開方式,例如:x0dx0a ifstream input_file;x0dx0a input_file.open("file2.txt", ios::binary); x0dx0a打開後,可以使用is_open()檢測是否打開成功:x0dx0a if(input_file.is_open()){},然後可以使用流操作符向文件寫數據了,例如:x0dx0a input_file << "this is a test line";x0dx0a input_file << "another info";x0dx0a另外,這里的文件打開方式在ios空間下:x0dx0a ios::app 添加到文件尾x0dx0a ios::ate 把文件標志放在末尾而非起始。x0dx0a ios::trunc 默認. 截斷並覆寫文件。x0dx0a ios::nocreate 文件不存在也不創建。x0dx0a ios::noreplace 文件存在則失敗。x0dx0aofstream使用方式類似,讀取一行數據可以使用getline(buf, count), 類型於fgets()。fstream類還提供一個很多其它方法,如fclose()為關閉文件,eof()用於檢測狀態是否已經到了文件末尾。x0dx0a這里還有兩個類似於上述的fread()和fwrite()函數,是read(), write(),功能和用法類似類似,例如:x0dx0a output_file.write((const char*)stu, 3 * sizeof(struct student_t));x0dx0a input_file.read((char*)stus, 3 * sizeof(struct student_t));x0dx0a注意,這里也需要使用二進制模式打開,否則read的時候最後的上些數據讀不完全。調用上面兩個函數後可以使用bad()來檢測文件流對象是否錯誤,例如,if(input_file.bad()){printf("error when read file\n"); return;},最後input_file.close()即可。x0dx0a 最後,C/C++文件的操作並不復雜,多使用幾次便可熟練掌握,需要注意的就是文件的打開方式,和當用同一個文件指針進行又讀又寫時,注意文件指針位置的移動。
㈨ c語言怎麼創建文件,修改文件內容。
1.fopen()
fopen的原型是: *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語言文件添加內容
C語言中,通過文件打開函數fopen中的第二個參數,來設置打開模式。要在文件中添加內容,而不是重寫,只需要設置a模式即可(append).
fopen的聲明為
FILE * fopen(const char * name, const char *mode);
功能是打開文件名為name的文件,打開模式由mode指定。
當mode為
"a": 以追加方式打開。
"ab": 以追加方式打開二進制文件。
"ab+":以追加方式打開二進制文件,並可讀。
"a+":以追加方式打開文件,並可讀。