用C语言打开文件的几种方式及区别
生活随笔
收集整理的這篇文章主要介紹了
用C语言打开文件的几种方式及区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| r(只讀) | 讀取一個已經存在的文本文件 | 出錯 |
| w(只寫) | 打開一個文本文件,輸出數據,若文件存在則文件長度清為0,即該文件內容會消失 | 建立新文件 |
| a (追加) | 向文本文件末尾添加數據,原來文件中的數據保留,新的數據添加到文件為,原文件EOF保留 | 建立新文件 |
| rb(只讀) | 讀取一個二進制文件 | 出錯 |
| wb(只寫) | 打開一個二進制文件,輸出數據,若文件存在則文件長度清為0,即該文件內容會消失 | 建立新文件 |
| ab (追加) | 向二進制文件尾添加數據 | 建立新文件 |
| r+ (讀寫) | 對一個文本文件進行讀寫操作 | 出錯 |
| w+ (讀寫) | 對一個文本文件進行讀寫操作,若文件存在則文件長度清為0,即該文件內容會消失 | 建立新文件 |
| a+(讀寫) | 向文本文件末尾添加數據,原來文件中的數據保留,新的數據添加到文件尾,原文件EOF不保留 | 建立新文件 |
| rb+ (讀寫) | 讀寫一個二進制文件 | 出錯 |
| wb+ (讀寫) | 對一個二進制文件進行讀寫操作,若文件存在則文件長度清為0,即該文件內容會消失 | 建立新文件 |
| ab+(讀寫) | 向二進制文件末尾添加數據,原來文件中的數據保留,新的數據添加到文件尾 | 建立新文件 |
r+具有讀寫屬性,從文件頭開始寫,保留原文件中沒有被覆蓋的內容;
w+也具有讀寫屬性,寫的時候如果文件存在,會被清空,從頭開始寫。
先讀后寫先寫后讀的問題
再用C語言對文件先讀后寫或者先寫后讀時,一定要注意文件指針的位置情況。不然可能導致本該重寫的以追加方式寫入等錯誤。
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; }當文件以r+, w+, 或者 a+ 形式打開后,我們可以讀寫該文件,但是我們讀完文件準備寫時,文件指針位于文件尾,想要覆蓋輸入,則必須使用文件定位函數,如fsetpos,fseek和rewind等。
比如從頭重新寫:則需要fseek(fp, 0, SEEK_SET);將文件指針返回頭部。
當從寫入切換為讀取時,則需要使用fflush清除文件緩存或者使用文件定位函數。
總結
以上是生活随笔為你收集整理的用C语言打开文件的几种方式及区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一次性打开计算机任意程序的脚本(C语言)
- 下一篇: C程序多线程同时画圆画方