首頁 > 軟體

C語言超詳細檔案操作基礎下篇

2022-03-15 19:00:14

一、檔案的順序讀寫

兄弟們,上一章只介紹到了如何把單個的字元或者字串如何寫到檔案裡或者從檔案中讀取,檔案的順序讀寫後面還有幾個函數沒有介紹完,我們接著上一章繼續,給大家介紹完,圖片再拷給大家回顧回顧

1圖片如下:

1.格式化的輸出函數(fprintf)

這樣我們就可以把格式化的資料寫到檔案裡了。

程式碼如下:

#include<stdio.h>
struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = { "abcdef",20,5.5f };
	FILE* pf = fopen("test.dayta", "w");
	if (NULL == pf)
	{
		return 1;
	}
	//寫檔案
	fprintf(pf, "%s %d %f", s.arr, s.num, s.sc);//這就是如何把格式化的資料寫到檔案裡
	//關閉檔案
	fclose(pf);
	pf = NULL;
	return 0;
 
}

2.格式化的輸入函數(fscanf)

這樣我們就可以從檔案裡讀取格式化的資料了。

程式碼如下:

#include<stdio.h>
struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = {0};
	FILE* pf = fopen("test.dayta", "r");
	if (NULL == pf)
	{
		return 1;
	}
	//寫檔案
	fscanf(pf, "%s %d %f", s.arr, &(s.num), &(s.sc));//這就是如何把格式化的資料寫到檔案裡
	printf("%s %d %f", s.arr, s.num, s.sc);
	fprintf(stdout, "%s %d %f", s.arr, s.num, s.sc);//這類函數引數不同,功能就不同,可以適用於所有的流
	//關閉檔案
	fclose(pf);
	pf = NULL;
	return 0;
 
}

3.二進位制讀寫

1.二進位制輸出函數(fwrite)

以二進位制的方式把資料寫到檔案裡

程式碼如下:

struct S
{
    char arr[10];
    int num;
    float sc;
};
int main()
{
    struct S s = {"abcdef",20,5.5f};
    FILE* pf = fopen("test.dayta", "w");
    if (NULL == pf)
    {
        return 1;
    }
    //寫檔案
    fwrite(&s, sizeof(struct S), 1, pf);
    //關閉檔案
    fclose(pf);
    pf = NULL;
    return 0;
 
}

2.二進位制輸入函數

以二進位制的方式從檔案裡讀取資料

程式碼如下:

#include<stdio.h>
struct S
{
	char arr[10];
	int num;
	float sc;
};
int main()
{
	struct S s = {0};
	FILE* pf = fopen("test.dayta", "r");
	if (NULL == pf)
	{
		return 1;
	}
	//寫檔案
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f", s.arr, &(s.num), &(s.sc));
	//關閉檔案
	fclose(pf);
	pf = NULL;
	return 0;
 
}

3.scanf,fscanf,sscanf、printf,fprintf,sprintf的區別

scanf —  針對標準輸入的格式化的輸入語句—stdin

fscanf — 針對所有輸入流的格式化的輸入語句 — stdin/檔案

sscanf — 從一個字串中讀取一個格式化的資料

printf — 針對標準輸出的格式化語句 — stdout 

fprintf — 針對所有輸出流的格式化輸出語句 — stdout/檔案

sprintf — 把一個格式化的資料,轉換成字串

二、檔案的隨機讀寫

1.fseek函數

fseek函數:根據檔案指標的位置和偏移量來定位檔案指標。

程式碼如下:

#include<stdio.h>
int main()
{
	
	FILE* pf = fopen("test.data", "r");
	if (NULL == pf)
	{
		perror("main");
		return 1;
	}
	//讀取檔案
	int ch = fgetc(pf);
	printf("%cn", ch);
	//調整檔案
 
	fseek(pf, 2, SEEK_END);
	int ch = fgetc(pf);
	printf("%cn", ch);
 
	//關閉檔案
	fclose(pf);
	pf = NULL;
	return 0;
 
}

2.ftell函數

ftell函數:返回檔案指標相對於起始位置的偏移量(告知偏移量是多少)

3.rewind函數

rewind函數:讓檔案指標的位置回到檔案的起始位置

三、被錯誤使用的feof

feof(檔案結束返回非0)

feof應用於當檔案讀取結束的時候,判斷是讀取失敗結束,還是遇檔案尾結束

fgetc函數在讀取結束的時候,會返回EOF,正常讀取的時候,返回的是讀取到的字元ASCII碼值

fgets函數在讀取結束的時候返回NULL,正常讀取的時候返回存放字串的空間起始地址。

fread函數在讀取的時候,返回的是實際讀取到的完整元素的個數。如果發現讀取到的元素個數小於指定的元素個數,這就是最後一次讀取了。

寫程式碼test.txt檔案拷貝一份,生成test2,txt

#include<stdio.h>
int main()
{
	FILE* pfread = fopen("test.txt", "r");
	if (NULL == pfread)
	{
		return 1;
	}
	FILE* pfwrite = fopen("test2.txt", "w");
	{
		if (pfread == NULL)
		{
			fclose(pfread);
			pfread = NULL;
				return 1;
		}
		//檔案開啟成功
		//讀寫檔案
		int ch = 0;
		while((ch = fgetc(pfread))!= EOF)
		{
			//寫檔案
			fputc(ch, pfwrite);
		}
	}
	//關閉檔案
	fclose(pfwrite);
	pfwrite = NULL;
	return 0;
}

總結

綜合兩篇文章簡單的介紹了什麼是檔案,檔案的使用和操作方法,學會檔案的使用讓我們能更進一步加深對程式設計的瞭解,相信大家都學會了。如果上述文章有任何問題 ,歡迎大佬們提出質疑,我會虛心學習和改正,最重要的是能共同進步,共同成長,學習好程式設計。

到此這篇關於C語言超詳細檔案操作基礎下篇的文章就介紹到這了,更多相關C語言 檔案操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com