文件操作学习



前言

此部分为C语言在Linux下编程的文件相关操作


一、使用C语言库函数打开关闭文件

  • FILE *fopen( const char * filename, const char * mode );
  • int fclose(FILE *fp);

二、文本文件文件读取与写入

  • 写入文本文件
  • int fprintf(FILE *fp, const char *format, …);
/*此程序用于尝试写入文本文件
 *作者:zhy 时间:2020 1 21
 */

#include <stdio.h>

int main(int argc,char* argv[])
{
	int i=0;
	FILE *fp=0;
	if((fp=fopen("/home/homeboy/public/test.txt","w"))==0)
	{
		printf("error!\n");
		return -1;
	}

	while(i!=5)
	{
		fprintf(fp,"=%d=yaho,minasang,matsuri(马自立)desuyo\n",i);
		i++;
	}

	fclose(fp);
	return 0;
}

  • 读取文本文件
  • char *fgets(char *buf, int size, FILE *fp);
/*此程序用于演示文本文件的读取
 * 作者:zhy 时间:2020 1 22
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char *argv[])
{
	FILE *fp=NULL;		//定义文件变量指针
	char strbuf[301];   //存放从文件中读取的一行的内容

	if(argc!=2)
	{
		printf("\n此程序用于演示文本文件的读取\n\
用法:将需要打开的文件路径作为参数 \n\
例如: ./book10 /home/homeboy/public/test.txt \n");
		return -1;
	}

	memset(strbuf,0,sizeof(strbuf));

	//以只读的方式打开文件
	if((fp=fopen(argv[1],"r"))==0)
	{
		printf("error!\n");
		return -1;
	}

	//逐行读取文件的内容输出到屏幕
	while(1)
	{
		if(fgets(strbuf,301,fp)==0) break;
		printf("=%s=",strbuf);
	}

	fclose(fp);
}

三、二进制文件文件读取与写入

  • 写入数据
  • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
/*
 * 此程序演示二进制文件的写入
 * 作者:zhy 时间:2020 1 22
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct str_girl
{
	char name[50];  //姓名
	int age;		//年龄
	int height;		//身高 单位:厘米
	char app[20];	//相貌 
	char ww[20];	//身材
}str_girl;

int main(int argc,char *argv[])
{
	str_girl girlone;	//定义结构体实例
	FILE *fp=NULL;		//定义文件指针变量

	//以只写方式打开二进制文件
	if((fp=fopen("/home/homeboy/public/date.dat","w"))==0)
	{
		printf("error!\n");
		return -1;
	}

	//为结构体赋值
	strcpy(girlone.name,"夏色祭");
	strcpy(girlone.app,"可爱");
	strcpy(girlone.ww,"砧板");
	girlone.age=17;
	girlone.height=155;

	fwrite(&girlone,1,sizeof(girlone),fp);

	fclose(fp);
	return 0;
	
}
  • 读取数据
  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
/*
 * 此程序演示二进制文件的读取
 * 作者:zhy 时间:2020 1 22
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct str_girl
{
	char name[50];  //姓名
	int age;		//年龄
	int height;		//身高 单位:厘米
	char app[20];	//相貌 
	char ww[20];	//身材
}str_girl;

int main(int argc,char *argv[])
{
	str_girl girlone;	//定义结构体实例
	FILE *fp=NULL;		//定义文件指针变量

	//以只写方式打开二进制文件
	if((fp=fopen("/home/homeboy/public/date.dat","r"))==0)
	{
		printf("error!\n");
		return -1;
	}

	fread(&girlone,1,sizeof(girlone),fp);

	printf("name=%s=\n",girlone.name);
	printf("age=%d=\n",girlone.age);
	printf("height=%d=\n",girlone.height);
	printf("app=%s=\n",girlone.app);
	printf("ww=%s=\n",girlone.ww);

	fclose(fp);
	return 0;
}

四、文件其他操作

  1. 把缓冲区的数据立即写入文件
    int fflush(FILE *fp);
  2. ftell函数用来返回当前文件位置指针的值
    clong ftell(FILE *fp);
  3. rewind函数用来将位置指针移动到文件开头
    void rewind ( FILE *fp );
  4. fseek() 用来将位置指针移动到任意位置
    int fseek ( FILE *fp, long offset, int origin );
  • offset 为偏移量,也就是要移动的字节数。之所以为 long 类型,是希望移动的范围更大,能处理的文件更大。offset 为正时,向后移动;offset 为负时,向前移动。
  • origin 为起始位置,也就是从何处开始计算偏移量。C语言规定的起始位置有三种,分别为:0-文件开头;1-当前位置;2-文件末尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值