1. 程式人生 > >檔案操作使用的函式

檔案操作使用的函式

使用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,分別表示格式化寫入和追加寫入。其中wa檔案資源管理器裡面沒有該檔案的情況下,可以新建你寫的檔名字。

  • 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要改為wa進行寫入。當它和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中.

未完待續

如有錯誤,請多多指教