激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言中炫酷的文件操作實例詳解

C語言中炫酷的文件操作實例詳解

2022-01-24 14:13針眼_ C/C++

內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件操作的相關資料,需要的朋友可以參考下

 

什么是文件

磁盤上的文件是文件

但是在程序設計中,我們一般談的文件有兩種:程序文件和數據文件(從文件功能的角度來分類)。

 

程序文件

包括源程序文件(例如.c文件)目標文件(windows環境后綴為.obj)可執行程序(windos環境后綴為exe)。

 

數據文件 (本文重點)

文件的內容不一定是程序,而是程序運行時讀寫的數據,比如程序運行需要從中讀取數據的文件,或者輸出內容的文件。

 

文件名

文件就像人一樣,他也要有姓氏和名字來讓其他文件或者人知道這個文件是誰。

對于每一個文件要,,都有一個唯一的文件標識,以便用戶識別和引用。

文件名格式:文件路徑+文件名主干+文件后綴

例如:D:CSDNTest.txt

為了方便起見,我們叫文件標識為文件名

 

文件的打開和關閉

 

文件指針

我們知道,指針是指向一個地址的,整形指針指向一個整形的空間,數組指針指向一個數組的空間,那么文件指針自然就是指向文件的指針了。

每個被使用的文件都在內存中開辟了一個相應的文件信息區,用來存放文件的相關信息(如文件的名字,文件狀態及文件當前的位置等)。這些信息是保存在一個結構體變量中的。該結構體類型是有系統聲明的,取名FILE。

這是再vs的stdio頭文件下的文件信息區結構體

struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };
typedef struct _iobuf FILE;
//不同的C編譯器的FILE類型包含的內容不完全相同,但是大同小異。

就像學生要有學號姓名年齡這些信息一樣,文件也有他的信息,比如這個文件的地址。這些信息存放于這個結構體中,通過typedef重命名為FILE,并且我們不需要關心一些細節(你會關心我昨天晚上吃了什么嗎)。

一般都是通過一個FILE的指針來維護這個FILE結構的變量,這樣使用起來更加方便。

下面我們可以創建一個FILE*的指針變量:

FILE* pf;

pf通過該文件信息區中的信息就能夠訪問該文件。

也就是說,通過文件指針變量能夠找到與它關聯的文件。

但上面的文件指針并未指向明確的位置,他暫時是一個野指針。

所以接下來,我們來學習如何打開(創建)一個文件。

 

文件函數

文件在讀寫之前應該先打開文件,在使用結束之后應該關閉文件。

在編寫程序的時候,在打開文件的同時,都會返回一個FILE*的指針變量指向該文件,也相當于建立了指針和文件的關系。

ANSIC規定使用fopen函數來打開文件,fclose來關閉文件。

//打開文件
FILE* fopen(const char *filename,const char *mode);
//第一個參數是文件名,第二個參數是打開方式
//關閉文件
int Fclose(FILE *stream);

部分打開方式如下圖

C語言中炫酷的文件操作實例詳解

現在我們來練習一下打開文件

//打開文件
	FILE* pf = fopen("data.txt","r");
	//以只讀的方式打開這個文件
	//如果文件打開失敗會返回空,否則會返回指向該文件的指針
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//讀文件
	//關閉文件
	fclose(pf);
	pf = NULL;
	return 0;

C語言中炫酷的文件操作實例詳解

但是卻打開失敗了!!

原因是,從上面的打開方式一圖我們可以看出,以"r"方式打開,需要該文件真實存在,但是我并沒有創建這個文件,所以打開失敗了

叮~文件創建成功

我們再來看執行結果

C語言中炫酷的文件操作實例詳解

這回沒有報錯

但是,這里是將data.txt文件放在了該.c文件目錄下,在我將該文件放在別的地方,仍然打開失敗報錯。

原因是,我們這段代碼只輸入了文件名,所以他只在當前文件目錄下尋找該文件,在其他地方的文件我們就找不到了。

這里我們來看看兩個東西,一個叫相對路徑,一個叫絕對路徑

 

相對路徑與絕對路徑

 相對路徑

只認為是當前目錄下的文件,如上面的代碼中。

絕對路徑

帶上文件的從磁盤到目標文件的路徑

例如

D:Program Filesdata.txt

但是請注意,在編程中,是轉義字符,所以我們需要讓不再是轉義字符,使其代表它本身

D:Program Filesdata.txt

 

輸入輸出流

什么是輸入輸出流

學習過編程,一定知道printf或者cout或者System.out.println吧,

這些函數用于打印數據,這就是標準的輸出流。使數據輸出或者寫入文件中,我們叫輸出流。

我們打印HELLO WORLD在屏幕上,就是一個標準輸出流

像scanf之類的,從文件輸入或者讀數據到內存中,就是輸入流。

一些基本的輸入輸出函數如下。

C語言中炫酷的文件操作實例詳解

比如,fputc就是寫一個字符進去,fgetc就是讀一個字符。

//打開文件
	FILE* pf = fopen("data.txt","w");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//讀文件
	fputc("a", pf);
	fputc("b", pf);
	fputc("c", pf);
	//fputc第一個參數為輸入的字符,第二個使對應文件的指針

	//關閉文件
	fclose(pf);
	pf = NULL;
	return 0;

C語言中炫酷的文件操作實例詳解

寫入了abc三個字符。

fputc和fgetc每次讀/寫一個字符后,文件指針pf會向后移動,類似strtok函數。會記錄上一次輸入/輸出的地址。

如果不這樣,那豈不是一直在一個位置重復寫入或者讀文件了。

接下來看看fgetc讀取字符

//打開文件
	FILE* pf = fopen("data.txt","r");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//讀文件

	int a = fgetc(pf);
	printf("%c", a);
	a = fgetc(pf);
	printf("%c", a);
	a = fgetc(pf);
	printf("%c",a);
	//關閉文件
	fclose(pf);
	pf = NULL;
	return 0;

執行結果

C語言中炫酷的文件操作實例詳解

這就是順序讀寫,按著順序讀入寫入。

當然,有順序讀寫,就會有隨機讀寫

從字面意思就能看到,隨機讀寫emmm。

當然,除了fgetc這類,fgets自然就是讀取一行了(只會讀/寫一行哦)

如果你用這類函數輸出在標準輸入或者標準輸入(stdout或者stdin)上,他和printf,scanf沒什么區別。

接下來,我們來看二進制的讀和寫

 

二進制讀寫

 

fwirte

C語言中炫酷的文件操作實例詳解

以二進制的形式將內容寫入文件中

第一個參數是你要寫入數據的數據地址,第二個參數是一個類型的大小(字節)。第三個參數是你要寫入幾個數據,第四個則是你選定寫入的流。

struct S{
	int n;
	double d;
	char name[10];
};

int main()
{
	struct S s = { 10, 3.14, "zhangsan" };
	//打開文件
	FILE* pf = fopen("data.txt","wb");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//讀文件
	fwrite(&s,sizeof(s),1,pf);

	//關閉文件
	fclose(pf);
	pf = NULL;
	return 0;
}

如上代碼會將數據以二進制的形式寫入data.txt

雖然我們看不懂,但是能看到zhangsan是我們輸入的內容

C語言中炫酷的文件操作實例詳解

 

fread

以二進制的形式讀

C語言中炫酷的文件操作實例詳解

和fwirte一樣,只不過buffer不是const形式了,因為我們要將數據讀入該指針指向的目標。

struct S{
	int n;
	double d;
	char name[10];
};

int main()
{
	struct S s = {0};
	//打開文件
	FILE* pf = fopen("data.txt","rb");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//讀文件
	fread(&s,sizeof(struct S),1,pf);
	printf("%d  %lf  %s
",s.n,s.d,s.name);

	//關閉文件
	fclose(pf);
	pf = NULL;
	return 0;
}

C語言中炫酷的文件操作實例詳解

 

總結

到此這篇關于C語言中文件操作的文章就介紹到這了,更多相關C語言文件操作內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/byte_weibo/article/details/120651529

延伸 · 閱讀

精彩推薦
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: 欧美一级做a | av中文字幕免费在线观看 | 久久av免费观看 | 国产午夜精品一区二区三区不卡 | 欧美交在线 | 黄视频免费在线 | 欧美黄色三级视频 | 精品小视频 | 亚洲一区二区 | 成码无人av片在线观看网站 | 日本教室三级在线看 | 最污网站| 亚洲影视在线观看 | 久久狂草| 国产一级淫片在线观看 | 黄色网电影 | 日韩欧美精品电影 | 一区二区三区欧美日韩 | 龙的两根好大拔不出去h | av在线电影网址 | 黄色小视频免费在线观看 | 被摁着灌浓精囚禁高h1v1 | 日韩大片在线永久观看视频网站免费 | 高清国产一区二区三区四区五区 | 暴力强行进如hdxxx | 黑人一级片视频 | 欧美日韩一 | 久久久久久久久久美女 | 午夜视频你懂的 | 午夜影视一区二区 | 激情网站免费观看 | 手机国产乱子伦精品视频 | 亚洲天堂字幕 | 97伦理| 精品人伦一区二区三区蜜桃网站 | 成人免费福利 | 曰韩一级片 | 91懂色| 日比视频 | 国产成人精品免费视频大全办公室 | 国产电影av在线 |