C语言里的文件函数
1、File?*pf?=?fopen("文件名","打開方式");
文件名可以加路徑,兩個"\\"或者一個"/"
打開方式有這么幾種:r只讀,r+可讀可寫,w只寫,w+可讀可寫,會覆蓋。a追加,a+可讀可寫。
2、對于windows系統來講,都可以帶上b,因為在windows系統下,還是有這個區分的。
尤其是這個回車轉義字符。因為在?windows下面,\r\n代表回車,而在linux/unix系統的文本文件下,\n就代表一個回車。
?
3、Fopen?和?fclose要成對出現。就跟malloc跟free一樣,打開不關,跟申請了不釋放一樣,都會造成不安全的。所以一定要成對出現。
Fclose(pf);
?
4、getc()?和?putc()?得到一個?字符,和送出一個字符。
示例用法:
Int main(){FILE *pf = fopen("a.txt","r");Char c =0;While( (c=getc(pf))!=EOF){Printf("%c",c);}Printf("\n讀取結束\n");Fclose(pf);Getchar();Return 0; } Int main(){FILE *pf = fopen("b.txt","w");Char c[]="lifei";Int i = 0;For(;i<strlen(c);i++){Putc(c[i],pf);}Printf("寫入結束\n");Fclose(pf);Getchar();Return 0; }?
5、EOF?的值是-1代表文件結束。函數feof(pf)?用來判定一個文件是否已經到文件結尾了。如果到結尾的話,返回真,否則返回假?
示例用法:
EOF跟上面的第四個點的第一個案例是相同的。
?
Int main(){FILE *pf = fopen("a.txt","r");Char buf[1024] = {0};while (!feof(pf)){ //如果沒有到文件結尾為真就繼續執行。fgets(buf, sizeof(buf), pf);printf(buf);}printf("\n讀取結束\n");fclose(pf);getchar();return 0; }?
6、有幾個函數總是蒙蔽。。。
?
Printf()
?
Sprintf();
?
Fprintf();
?
總是不知道誰是誰,干嗎用的。現在就來厘清一下他們的關系:
?
Printf();我們接觸最多,是用于輸出的,通常情況下直接輸出到屏幕。當然也可以輸出到文件中。
?
Sprintf();?是格式化輸出,目標是?一個字符串。它比printf就多一個參數,就是最前面的字符數組,用于接收被輸出的對象。
?
Fprintf();是文件輸出,前面加上文件目標就可以了。
?
例程:
#include?<stdio.h>
#include?<string.h>
#pragma?warning(disable:4996)
int?main(){
FILE??*pf?=?fopen("a.txt",?"r");
FILE?*pfw?=?fopen("content.txt",?"w");
char?buf[1024]?=?{?0?};
char?forout[100]?=?{?0?};
int?i?=?1;
while?(!feof(pf)){
memset(buf,?0,?sizeof(buf));//這個?在?string.h?里面
fgets(buf,?sizeof(buf),?pf);
sprintf(forout,?"第?%d?行:%s",?i++,buf);//格式化輸出到字符數組中。
printf(forout);//輸出到顯示器
fprintf(pfw,"%s",forout);//輸出到文件
?
}
printf("\n讀取結束\n");
printf("寫出結束\n");
fclose(pf);
getchar();
return?0;
}
7、因為?fprintf();是打印數據到文件所以結合scanf()是從鍵盤得到數據,fscanf()就是從文件得到數據。
與fgets()一樣,fscanf()也是從鍵盤上獲取數據,不過fgets()可以獲取文件結尾的回車符號,fscanf()不能獲取結尾的回車換行符號。
示例:
#include <stdio.h> #pragma warning(disable:4996)int main(){FILE *pf = fopen("a.txt","r");char buf[200] = { 0 };while (!feof(pf)){fscanf(pf, "%s", buf);printf("%s\n",buf);}printf("讀取結束");fclose(pf);getchar();return 0; }8、stat函數
例程:
#include <stdio.h> #include <sys/stat.h> #pragma warning(disable:4996)int main(){//當你知道 只有跑可以追趕上別人的時候,你會不會跑?struct stat st;stat("main.c", &st);long len = st.st_size;printf("文件大小為:%d\n", len);getchar();return 0; }打印文件:
#include <stdio.h> #include <sys/stat.h> #pragma warning(disable:4996)int main(){//當你知道 只有跑可以追趕上別人的時候,你會不會跑?struct stat st;stat("main.c", &st);long len = st.st_size;printf("文件大小為:%d\n", len);FILE *pf = fopen("main.c", "r");char buf[100] = { 0 };while (!feof(pf)){fgets(buf, sizeof(buf), pf);printf("%s", buf);}fclose(pf);getchar();return 0; }?
?
#include <stdio.h> #pragma warning(disable:4996) int main(){FILE *pf = fopen("a.txt", "r");if (pf == NULL)return 0;int position = ftell(pf);printf("文件剛剛打開時候的位置%d\n",position);char buf[100] = { 0 }; char _4out[100] = { 0 };int i = 1;while (!feof(pf)){printf("currentPosition:%d", ftell(pf));fgets(buf, sizeof(buf), pf);sprintf(_4out, "第 %d 行:%s",i++, buf);printf(_4out);}printf("\n第一遍結束,下面第二遍輸出原文\n");printf("值得注意的是:在windows文本文件環境下,一個回車由\\r\\n兩個字符組成,所以第一行有八個字節,等到再次讀取的時候當前位置是8.\n");fseek(pf, 0, SEEK_SET);while (!feof(pf)){printf("當前位置:%d", ftell(pf));fgets(buf, sizeof(buf), pf);printf(buf);}fclose(pf);getchar();return 0; }?
?
轉載于:https://www.cnblogs.com/letben/p/5252158.html
總結