0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言_文件IO操作函數(shù)總結(jié)

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:53 ? 次閱讀

1. 文件IO總結(jié)

文件IO操作:  對(duì)文件系統(tǒng)里的文件進(jìn)行:  打開(kāi)、創(chuàng)建、讀、寫(xiě)、關(guān)閉等運(yùn)用。
C語(yǔ)言下標(biāo)準(zhǔn)文件IO接口(函數(shù)): 
(1)頭文件:  stdio.h    輸入輸出函數(shù):  printf 、scanf
(2)相關(guān)函數(shù):  fopen、fread、fwrite、fclose
2.1 標(biāo)準(zhǔn)文件操作有兩套函數(shù):
1.標(biāo)準(zhǔn)C語(yǔ)言下的文件操作接口。fopen系列
常用于:  對(duì)普通文件的讀寫(xiě)。
2.Linux操作系統(tǒng)下的文件操作接口。open系列
常用于:  對(duì)設(shè)備文件進(jìn)行讀寫(xiě)。 (鼠標(biāo)、鍵盤、聲卡、..)

2. C語(yǔ)言標(biāo)準(zhǔn)文件操作接口

2.1 最常用的4個(gè)函數(shù)

#include 
//打開(kāi)文件
FILE *fopen(const char *path, const char *mode); 
//讀文件
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//寫(xiě)文件
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
//關(guān)閉文件
int fclose(FILE *fp);

2.3 寫(xiě)函數(shù)的基本運(yùn)用

#include 
#include 
#include 

int main()
{
	FILE *file;
	int cnt;
	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","a+b");
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}
	/*2. 寫(xiě)數(shù)據(jù)*/
	cnt=fwrite("1234567890",1,10,file);
	
    /*3. 關(guān)閉文件*/
	fclose(file);

	printf("cnt=%d\n",cnt);
	return 0;
}

2.4 讀函數(shù)基本運(yùn)用

#include 
#include 
#include 

int main()
{
	FILE *file;
	int cnt;
	char buff[100];

	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","rb"); //malloc
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}
	/*2. 寫(xiě)數(shù)據(jù)*/
	cnt=fread(buff,1,100,file);
	
    /*3. 關(guān)閉文件*/
	fclose(file);  //free 

	buff[cnt]='\0';
	printf("%s\n",buff);
	printf("cnt=%d\n",cnt);
	return 0;
}

2.5 文件指針位置偏移 (自動(dòng)向后偏移)

#include 
#include 
#include 
int main()
{
	FILE *file;
	int cnt;
	char data;

	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","rb"); //malloc
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}
	/*2. 讀數(shù)據(jù)---驗(yàn)證文件指針是否可否自動(dòng)向后偏移*/
	cnt=fread(&data,1,1,file);
	printf("data=%c\n",data);
	cnt=fread(&data,1,1,file);
	printf("data=%c\n",data);
	cnt=fread(&data,1,1,file);
	printf("data=%c\n",data);
	cnt=fread(&data,1,1,file);
	printf("data=%c\n",data);
	cnt=fread(&data,1,1,file);
	printf("data=%c\n",data);

    /*3. 關(guān)閉文件*/
	fclose(file);  //free 
	return 0;
}

2.6 設(shè)置文件指針位置

#include 
#include 
#include 
int main()
{
	FILE *file;
	int cnt;
	char data;

	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","rb"); //malloc
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}
	/*2. 偏移文件指針*/
	fseek(file,5,SEEK_SET);

	/*3. 讀數(shù)據(jù)---驗(yàn)證文件指針是否可否自動(dòng)向后偏移*/
	cnt=fread(&data,1,1,file);
	printf("data=%c\n",data);

    /*4. 關(guān)閉文件*/
	fclose(file);  //free 
	return 0;
}

2.7 以上午所學(xué)的函數(shù),如何判斷文件讀完了?到文件結(jié)尾?


#include 
#include 
#include 
int main()
{
	FILE *file;
	int cnt;
	char data;

	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","rb"); //malloc
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}
	/*2. 偏移文件指針*/
	fseek(file,5,SEEK_SET);

	/*3. 讀數(shù)據(jù)---驗(yàn)證文件指針是否可否自動(dòng)向后偏移*/
	while(1)
	{
		cnt=fread(&data,1,1,file);
		if(cnt!=1)break;
		printf("data=%c\n",data);
	}
    /*4. 關(guān)閉文件*/
	fclose(file);  //free 
	return 0;
}

2.8 文件讀寫(xiě)結(jié)構(gòu)體數(shù)據(jù)

//寫(xiě)結(jié)構(gòu)體數(shù)據(jù)
#include 
#include 
#include 
struct MyStruct
{
	int a;
	int b;
	char c[100];
};

int main()
{
	FILE *file;
	int cnt;
	struct MyStruct stu={666,888,"C語(yǔ)言文件操作學(xué)習(xí)"};

	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","wb"); 
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}

	/*2. 讀數(shù)據(jù)*/
	cnt=fwrite(&stu,1,sizeof(struct MyStruct),file);
	printf("cnt=%d\n",cnt);

    /*3. 關(guān)閉文件*/
	fclose(file);  //free 
	return 0;
}

//讀結(jié)構(gòu)體數(shù)據(jù)
#include 
#include 
#include 
struct MyStruct
{
	int a;
	int b;
	char c[100];
};

int main()
{
	FILE *file;
	int cnt;
	struct MyStruct stu;

	/*1. 打開(kāi)文件*/
	file=fopen("D:/123.txt","rb"); 
	if(file==NULL)
	{
		printf("文件打開(kāi)失敗!\n");
		return -1;
	}

	/*2. 讀數(shù)據(jù)*/
	cnt=fread(&stu,1,sizeof(struct MyStruct),file);
	printf("cnt=%d\n",cnt);

	printf("%d,%d,%s\n",stu.a,stu.b,stu.c);
    /*3. 關(guān)閉文件*/
	fclose(file);  //free 
	return 0;
}

2.9 文件操作的作業(yè)練習(xí)

1.  學(xué)習(xí)文件基本讀寫(xiě)使用
2.  編寫(xiě)文件拷貝程序。 實(shí)現(xiàn)文件拷貝。
3.  文件加密解密實(shí)現(xiàn)。 需要編寫(xiě)一個(gè)菜單。
4.   完善學(xué)生管理系統(tǒng)。
需要將所有學(xué)生信息保存到文件里,完善功能。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134056
  • 文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    280

    瀏覽量

    19831
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61967
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言-文件編程

    這篇文章介紹C語(yǔ)言文件編程函數(shù),案例代碼是在Linux環(huán)境下運(yùn)行測(cè)試的分別介紹了C語(yǔ)言標(biāo)準(zhǔn)庫(kù)的
    的頭像 發(fā)表于 09-09 11:33 ?1901次閱讀

    C語(yǔ)言文件操作

    C語(yǔ)言中沒(méi)有輸入輸出語(yǔ)句,所有的輸入輸出功能都用 ANSI C提供的一組標(biāo)準(zhǔn)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)。
    發(fā)表于 11-09 10:42 ?455次閱讀

    C語(yǔ)言函數(shù)如何返回多個(gè)數(shù)據(jù)

    C語(yǔ)言函數(shù)如何返回多個(gè)數(shù)據(jù)?這個(gè)操作在寫(xiě)代碼的時(shí)候還經(jīng)常遇到。
    發(fā)表于 07-25 10:53 ?850次閱讀

    linux基本操作C語(yǔ)言基礎(chǔ)

    目錄C語(yǔ)言基礎(chǔ)C++linux基本操作io操作數(shù)據(jù)結(jié)構(gòu)進(jìn)程線程網(wǎng)絡(luò)編程實(shí)戰(zhàn)項(xiàng)目
    發(fā)表于 12-17 07:53

    C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)

    C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),使用C語(yǔ)言編程時(shí),常用到的函數(shù)。
    發(fā)表于 05-11 16:41 ?0次下載

    C語(yǔ)言字符串操作總結(jié)大全(超詳細(xì))

    本文對(duì)c語(yǔ)言字符串的操作進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友可以參考。
    發(fā)表于 11-15 14:19 ?2016次閱讀

    標(biāo)準(zhǔn)IO操作原理及操作函數(shù)相關(guān)資料下載

    標(biāo)準(zhǔn)IO操作原理及操作函數(shù)相關(guān)資料下載
    發(fā)表于 04-03 16:53 ?4次下載

    C語(yǔ)言數(shù)據(jù)輸入輸出函數(shù)總結(jié)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言數(shù)據(jù)輸入輸出函數(shù)總結(jié)資料免費(fèi)下載。
    發(fā)表于 09-29 15:51 ?6次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>數(shù)據(jù)輸入輸出<b class='flag-5'>函數(shù)</b><b class='flag-5'>總結(jié)</b>資料免費(fèi)下載

    C語(yǔ)言入門教學(xué)之函數(shù)資料總結(jié)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言入門教學(xué)之函數(shù)資料總結(jié)免費(fèi)下載內(nèi)容包括了:1 庫(kù)函數(shù)2 函數(shù)
    發(fā)表于 10-23 17:53 ?3次下載

    C語(yǔ)言教程之文件函數(shù)的詳細(xì)資料說(shuō)明

    本文檔詳細(xì)介紹的是C語(yǔ)言教程之文件函數(shù)的詳細(xì)資料說(shuō)明主要內(nèi)容包括了:1.文件的基本概念,2.文本文件
    發(fā)表于 02-21 11:11 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>教程之<b class='flag-5'>文件</b><b class='flag-5'>函數(shù)</b>的詳細(xì)資料說(shuō)明

    C語(yǔ)言編程文件操作函數(shù)庫(kù)匯總資源下載

    C語(yǔ)言編程文件操作函數(shù)庫(kù)匯總資源下載
    發(fā)表于 04-15 16:42 ?13次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>編程<b class='flag-5'>文件</b><b class='flag-5'>操作</b><b class='flag-5'>函數(shù)</b>庫(kù)匯總資源下載

    C語(yǔ)言編程常用的文件處理函數(shù)匯總下載

    C語(yǔ)言編程常用的文件處理函數(shù)匯總下載
    發(fā)表于 04-15 16:44 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>編程常用的<b class='flag-5'>文件</b>處理<b class='flag-5'>函數(shù)</b>匯總下載

    stm32中的io函數(shù) STM32中的IO操作

    STM32系列單片機(jī)芯片的庫(kù)函數(shù)有很多種,而負(fù)責(zé)IO操作的庫(kù)函數(shù)是GPIO,GPIO函數(shù)在STM32單片機(jī)頭
    的頭像 發(fā)表于 07-22 15:29 ?1.3w次閱讀

    單片機(jī)IO操作總結(jié)

    單片機(jī)IO操作總結(jié)一、單片機(jī)IO口概述二、單片機(jī)IO操作1、輸入口使用2、輸出口使用三、關(guān)于
    發(fā)表于 11-05 13:06 ?31次下載
    單片機(jī)<b class='flag-5'>IO</b>口<b class='flag-5'>操作</b><b class='flag-5'>總結(jié)</b>

    c語(yǔ)言gets函數(shù)可以輸入數(shù)字嗎

    C語(yǔ)言中的gets函數(shù)是用來(lái)讀取字符串的,而不是用來(lái)讀取數(shù)字的。它會(huì)讀取輸入的字符直到遇到換行符或者文件結(jié)束符。因此,如果你嘗試使用gets函數(shù)
    的頭像 發(fā)表于 11-24 10:00 ?1063次閱讀