檔案操作使用的函式
使用VS程式設計環境時應注意以下這些函式在使用的時候會出錯,為什麼吶,因為微軟坑唄,哈哈開玩笑,微軟自己在這些函式的基礎上做出新函式以此來避免一些錯誤,所以吶這些新函式裡面也多了要傳入的引數,但是感覺沒啥用。所以我們要停掉微軟的新函式才能更快的程式設計。有2種停掉的方法
1.在程式的開頭加上 #define _CRT_SECURE_NO_WARNINGS
。
2.在選單欄裡找到專案
,點開後找到專案屬性
,(這裡的專案是你自己專案的名字),配置屬性
->C/C++
->SDL
,點選它選擇否。
- fopen函式
FILE *fp=fopen("sofency.txt","r")
,表示開啟資料夾中的sofency.txt檔案,"r"表示讀取其中的檔案.,這裡的r
換可以改為w
或者a
,分別表示格式化寫入和追加寫入。其中w
和a
在檔案資源管理器
裡面沒有該檔案的情況下,可以新建你寫的檔名字。
- fscanf函式
功能和scanf差不多,不過它獲取的路徑並不是在exe檔案裡面獲取,而是從文件裡面獲取。如果遇到換行或者空格就停止讀取。格式如下
fscanf(fp,"%d %s %d",&num,name,&height)
意思是從fp中讀取類似與%d %s %d
形式的內容,分別存到變數num,name,height中。#define _CRT_SECURE_NO_WARNINGS//排除安全函式的影響 #include<stdio.h> #include <stdlib.h> int main() { int num; char str[20]; int height; FILE *fp = fopen("1.txt", "r"); if (NULL == fp) { exit(0); } fscanf(fp, "%d %s %d", &num, str, &height); printf("%d %s %d", num, str, height); getchar(); return 0; }
在檔案資源管理器裡面的是
12 sofency 187
exe 檔案顯示的內容如下
完整的複製出來,是不是很神奇。
- fprintf函式
char str2[20] = "sofency.site"; FILE *fp = fopen("1.txt", "a"); fprintf(fp, "%s", str2);
寫入到1.txt中.
這個函式和printf也類似,不過不是在exe介面展示,而是向檔案資源管理器裡面的檔案裡面寫入,所以上面那個FILE *fp=("1.txt","r")
的r
要改為w
或a
進行寫入。當它和fscanf一起用是一定要注意r w a
的使用。
那麼它的用處哪,用處當然大了,當我們想要在檔案裡面新增一些東西的時候,就可以展現它的神功了。
- fwrite和fread函式
fwrite函式是以
二進值
方式寫入檔案,fread函式也是以二進位制方式讀出資料夾的內容的。如果要用fread 輸出資料夾的內容,那麼必須是fwrite寫進檔案的,否則讀出的全是亂碼,如下,
上述產生的原因是打開了我在檔案資源管理器裡面我自己新建 的檔案並寫了hello world
所產生的亂碼,為什麼,因為在文字文件裡面所用的是Unicode型別的字元,不能被fread所解釋,所以就產生亂碼
。
程式碼如下#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() { FILE *fp = fopen("1.txt", "w"); char str[20]; fread(str, 1, strlen(str), fp); puts(str); fclose(fp); getchar(); return 0; }
檔案資源管理器問價夾的內容如下
- fgets和fputs函式
這兩個函式使用的時候坑比較少,
fgets()使用方法如下#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() { FILE *fp = fopen("1.txt", "r");//我檔案裡面存的hello world char str[20]; fgets(str, 12, fp);//從fp檔案中讀取12個字元存在str處。 puts(str);//將存在str位置的內容打印出來 fclose(fp); getchar(); return 0; }
fputs()格式
fputs(“原地址”,新地址);可以這麼理解,把原地址存的內容存到新地址裡面str[20]="hello world"; fputs(str,fp);//將str的內容存到fp中.