日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用C语言打开文件的几种方式及区别

發(fā)布時(shí)間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用C语言打开文件的几种方式及区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文件使用方式含義如果指定的文件不存在
r(只讀)讀取一個(gè)已經(jīng)存在的文本文件出錯(cuò)
w(只寫)打開一個(gè)文本文件,輸出數(shù)據(jù),若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失建立新文件
a (追加)向文本文件末尾添加數(shù)據(jù),原來文件中的數(shù)據(jù)保留,新的數(shù)據(jù)添加到文件為,原文件EOF保留建立新文件
rb(只讀)讀取一個(gè)二進(jìn)制文件出錯(cuò)
wb(只寫)打開一個(gè)二進(jìn)制文件,輸出數(shù)據(jù),若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失建立新文件
ab (追加)向二進(jìn)制文件尾添加數(shù)據(jù)建立新文件
r+ (讀寫)對(duì)一個(gè)文本文件進(jìn)行讀寫操作出錯(cuò)
w+ (讀寫)對(duì)一個(gè)文本文件進(jìn)行讀寫操作,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失建立新文件
a+(讀寫)向文本文件末尾添加數(shù)據(jù),原來文件中的數(shù)據(jù)保留,新的數(shù)據(jù)添加到文件尾,原文件EOF不保留建立新文件
rb+ (讀寫)讀寫一個(gè)二進(jìn)制文件出錯(cuò)
wb+ (讀寫)對(duì)一個(gè)二進(jìn)制文件進(jìn)行讀寫操作,若文件存在則文件長(zhǎng)度清為0,即該文件內(nèi)容會(huì)消失建立新文件
ab+(讀寫)向二進(jìn)制文件末尾添加數(shù)據(jù),原來文件中的數(shù)據(jù)保留,新的數(shù)據(jù)添加到文件尾建立新文件

r+具有讀寫屬性,從文件頭開始寫,保留原文件中沒有被覆蓋的內(nèi)容;

w+也具有讀寫屬性,寫的時(shí)候如果文件存在,會(huì)被清空,從頭開始寫。

先讀后寫先寫后讀的問題

再用C語言對(duì)文件先讀后寫或者先寫后讀時(shí),一定要注意文件指針的位置情況。不然可能導(dǎo)致本該重寫的以追加方式寫入等錯(cuò)誤。

e.g.

The output of the follwing code is supposed to be: (and it is with gcc on linux)num:10 ret:1 num:30 ret:1 ==========++ 10 ## 30 40But instead it completely ignores the overwrite and only moves the filepointer and the output comes out as:num:10 ret:1 num:30 ret:1 ============ 10 20 30 40however if the two lines for the first fscanf and printf are commented, the output becomes:num:20 ret:1 ============ ## 20 30 40 Why? */#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) {FILE* fptr;int num,ret, ch;fptr = fopen("data.txt", "w"); // creating data.txt file: 10\n20\n30\n40\nfor (num = 1; num <= 4; fprintf(fptr, "%d\n", num++ * 10));fclose(fptr);fptr = fopen("data.txt", "r+"); // reopening with r+ // comment the following two lines and overwrite will work!ret = fscanf(fptr, "%d\n", &num); printf("num:%d ret:%d\n", num, ret); - // overwriting 20 (Fails!, file pointer moves with no error and no output)fprintf(fptr, "##"); fflush(fptr);ret = fscanf(fptr, "%d\n", &num); printf("num:%d ret:%d\n", num, ret); fclose(fptr);fptr = fopen("data.txt", "r"); // reopening with rprintf("============\n");while ((ch = fgetc(fptr)) != EOF) putchar(ch); // printing the content of data.txtfclose(fptr);return 0; }

當(dāng)文件以r+, w+, 或者 a+ 形式打開后,我們可以讀寫該文件,但是我們讀完文件準(zhǔn)備寫時(shí),文件指針位于文件尾,想要覆蓋輸入,則必須使用文件定位函數(shù),如fsetpos,fseek和rewind等。
比如從頭重新寫:則需要fseek(fp, 0, SEEK_SET);將文件指針返回頭部。
當(dāng)從寫入切換為讀取時(shí),則需要使用fflush清除文件緩存或者使用文件定位函數(shù)。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的用C语言打开文件的几种方式及区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。