文件操作


#include

void test1()

{

/*

w:(1)文件存在,將文件清空,再進行寫,(2)文件不存在,新建文件

r:(1)文件存在,正常打開(2)文件不存在,打開失敗

*/

/**

*? 1.打開文件

*? @param restrict#> 文件路徑 description#>

*? @param restrict#> 文件打開的方式 description#>

*? @return

*/

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "w");

if(fp==NULL)

{

printf("打開失敗\n");

return ;

}

//2.讀或寫操作

/**? *? fputc:是將一個字符寫入到文件里,

*/

char ch='b';

int res=fputc(ch, fp);

printf("res=%d\n",res);


//3.關閉文件

fclose(fp);

}

void test2()

{? //1.打開文件

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "r");

if(NULL==fp)

{

perror("fopen failed");

return ;

}

//2.對文件操作:

fgetc:意為從文件中讀取一個字符,讀取一個字節后,光標位置后移一個字節。

int ch=fgetc(fp);

printf("第一次讀ch=%c\n",ch);

ch=fgetc(fp);

printf("第二次讀ch=%d\n",ch);

printf("EOF=%d\n",EOF);

//3.關閉文件? ? fclose(fp);

}


void test3()

{

/*

拷貝文件4.txt里面的內容到3.txt里面。用fputc,fgetc實現


*/

}

void test4()

{

//1.fprintf:fprintf( )會根據參數format 字符串來轉換并格式化數據, 然后將結果輸出到參數stream 指定的文件中, 直到出現字符串結束('\0')為止。

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "w");

if(fp==NULL)

{

perror("fopen failed:");

return ;

}

//2.

fprintf(fp, "a=%d;;;;;b=%d\n",10,5);

//3.

fclose(fp);

}


void test5()

{

//1.

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "r");

if(fp==NULL)

{

perror("fopen failed:");

return ;

}? ? //2.

int a,b;

fscanf(fp, "a=%d;;;;;b=%d\n",&a,&b);//fscanf:其功能為根據數據格式(format)從輸入流(stream)中寫入數據(argument);與fgets的差別在于:fscanf遇到空格和換行時結束,注意空格時也結束,fgets遇到空格不結束。

printf("a=%d,b=%d\n",a,b);


//3.

fclose(fp);

}

void test6(){

//1.

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "a+");

if(fp==NULL)

{

perror("fopen failed:");

return ;

}

//unsigned char *_p

/*? ? ftell:告訴你文件指針相對偏移量的位置

*/

long position=ftell(fp);

printf("position=%ld\n",position);

//2.

fputc('a', fp);

position=ftell(fp);

printf("position=%ld\n",position);

fputc('b', fp);

position=ftell(fp);

printf("position=%ld\n",position);

fclose(fp);

}

void test7(){

//1.

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "w");

if(fp==NULL)

{

perror("fopen failed:");

return ;

}

//2.

//fputs:將字符串寫進文件里。

fputs("wo men ban hen niu bi\nxiao wai sheng hen cai\n", fp);

//3.? ? fclose(fp);


}

void test8()

{

//1.

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "r");

//2.

/*

1>將內容保存指定的變量里,? ? 2>指定多大個字節接收,

3>指定文件

*/

/*

fgets():讀取一行,碰到\n,表示讀取完成

*/

char string[50];

fgets(string, 50, fp);

printf("string=%s",string);

fgets(string, 50, fp);

printf("string=%s",string);? ? //3.

fclose(fp);

}


void test9()

{

int arr[5]={0,2,3,4,5};

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "w");

/*

參數解釋

1>存儲變量的地址

2>變量多大

3>存儲這種類型變量的個數

4>存儲到哪個文件

fwrite:

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

注意:這個函數以二進制形式對文件進行操作,不局限于文本文件

返回值:返回實際寫入的數據塊數目

(1)buffer:是一個指針,對fwrite來說,是要獲取數據的地址;

(2)size:要寫入內容的單字節數;

(3)count:要進行寫入size字節的數據項的個數;

(4)stream:目標文件指針

(5)返回實際寫入的數據項個數count。

說明:寫入到文件的哪里? 這個與文件的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之后的內容,文件的長度可以不變,stream的位置移動count個數;如果是a+,則從文件的末尾開始添加,文件長度加大。

fseek對此函數有作用,但是fwrite[1]函數寫到用戶空間緩沖區,并未同步到文件中,所以修改后要將內存與文件同步可以用fflush(FILE *fp)函數同步。


*/? ? fwrite(arr, sizeof(int), 5, fp);

fclose(fp);

}


void test10()

{

//1.

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "r");

//2.? ? /*

參數解釋

1>將讀到的內容存到哪個變量里,指定變量的地址

2>變量多大

3>讀取這種類型變量的個數

4>讀取哪個文件

fread:

fread是一個函數。從一個文件流中讀數據,最多讀取count個項,每個項size個字節,如果調用成功返回實際讀取到的項個數(小于或等于count),如果不成功或讀到文件末尾返回 0。

*/

int brr[5];

fread(brr, sizeof(int), 5, fp);

int i=0;

for (; i<5; i++)

{

printf("brr[%d]=%d\n",i,brr[i]);

}

fclose(fp);


}

typedef struct Student

{

char sex;

int age;

}Student;

void test11()

{

Student stu={'x',20};

//1.

FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "w");

//2.

fwrite(&stu, sizeof(stu), 1, fp);

//3.

fclose(fp);

}

void test12()

{

Student stu;

//1.? ? FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "r");

//2.

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

printf("age=%d,sex=%c\n",stu.age,stu.sex);

//3.

fclose(fp);

}

void test13()

{

Student stu[3]={{'x',20},{'m',30},{'b',40}};

//1.? ? FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "w");

//2.

int i=0;

for (; i<3; i++)

{

fwrite(&stu[i], sizeof(Student), 1, fp);

}

//3.

fclose(fp);

}

void test14()

{

Student stu[3];

//1.? ? FILE *fp=fopen("/Users/ccj/Desktop/2.txt", "r");

//2.

fread(stu, sizeof(stu), 1, fp);

int i=0;

for (; i<3; i++)

{

printf("stu[%d]的age=%d,sex=%c\n",i,stu[i].age,stu[i].sex);

}

//3.

fclose(fp);

}

int main()

{

test14();

return 0;

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容