C语言之文件操作

文件操作

文件打开:fopen()

FILE * fopen(const char* _Filename, const char* _Mode);
	参数:  _Filename:需要打开的文件名,字符串
	       _Mode:文件打开模式.字符串
		  "r" ---文件打开只可以读取,不可以写入.(如果文件不存在则打开失败)
		  "w" ----文件只可以写入,不可以读取.文件如果不存在就创建.内容都会清空
		   "r+"----文件可读可写的方式打开.不存在则失败
		   "w+"----文件可读可写的方式打开.不存在则创建且会清空.
		   "rb"----二进制方式读取文件
		   "wb"----二进制方式写入文件.
		   "a"-----追加方式打开,对文件进行写入操作.一开始光标在最后面.如果文件不存在则创建.
	返回值: 文件指针,只是一个文件的标志.如果失败返回NULL

文件写入:

	fputc---写入一个字符到文件.(内存->硬盘)
	int fputc(int _Ch, FILE * _File);
	参数:ch需要写入文件的字符ascii
	     file是文件指针.
	返回值:如果成功返回写入的字符.
	       如果失败返回EOF. error of file

文件读取:

fgetc()----从文件中获取一个字符.
	   int  fgetc(FILE * _File);
	   参数:  文件指针
	   返回值:int是字符的ascii码.char接受.是从文件中读取到的内容.
	文件关闭 fclose();
	int fclose(FILE * _File);

文件关闭 fclose();

	int fclose(FILE * _File);

其他操作

fgetc();—读文件
fputc();—写文件

文件读写.(把不同数据类型的内容转换成字符串写入文件中)

fscanf()-----读取文件
int fscanf(FILE * _File, char * _Format, …);
参数:_File 文件指针
_Format:格式化字符串,变长参数必须加取地址符号.

fprintf()----写入文件
int fprintf(FILE * _File,const char * _Format, …);
参数:_File 文件指针
_Format:格式化字符串,把不同的数据类型组建成字符串写入到文件中

//不同数据类型内容读写入文件代码
#include <stdio.h>
#include <string.h>

int main()
{
	FILE* pF1 = fopen("danny.txt", "w+");   //打开文件
	if (!pF1)
	{
		printf("打开文件失败\n");
		return 0;
	}
	//写入文件
	char name[12] = "danny";
	int age = 17;
	double length = 16.5;
	fprintf(pF1, "%s %d %lf", name, age, length); //执行写入操作
	fclose(pF1);
	
	//name[12] = { 0 };
	strcpy(name, "");
	age = 0;
	length = 0;
	
	//如果打开成功继续
	if (pF1=fopen("danny.txt", "r+"))
	{
		fscanf(pF1, "%s %d %lf", name, &age, &length);//执行读取操作
	}
	printf("名字:%s,年龄:%d,长度:%lf\n", name, age, length);  

	fclose(pF1);
	return 0;
}

不同的数据类型读写入文件

文件读写:
fread();—读文件
size_t fread(void* _DstBuf, size_t _ElementSize, size_t _Count,FILE * _File);
参数:_DstBuf,某一个变量的地址,需要读入到文件的缓冲.(一块内存空间)
_ElementSize:一次读取文件的大小. int x = 10;
_Count:读取文件的次数.
_File:文件指针.
返回值:实际读取文件的次数
fwrite();–写文件()
size_t fwrite(const void* _Str, size_t _Size, size_t _Count, FILE * _File);
参数:_Str:需要写入文件的指针.
_Size:一次写入文件大小
_Count:写入文件的次数
_File:文件指针.
返回值:实际写入文件的次数

//不同的数据类型读写入文件代码
#include <stdio.h>
typedef struct student
{
	int age;
	char name[20];
}Stu;

//把一个学员的信息写入文件,然后读取后打印出来.
int main()
{
	Stu xxx = { 17, "danny" };
	FILE * pFile = NULL;
	if (pFile = fopen("danny.av", "w+"))
	{
		int x = fwrite( &xxx,sizeof(Stu),1,pFile);  //结构体类型写入文件
		printf("x = %d\n", x);//
	}
	//fclose(pFile);
	rewind(pFile);
	Stu ooo = { 0,"" };
	//if (pFile = fopen("danny.av", "r+"))
		fread(&ooo, sizeof(Stu), 1, pFile);  //从文件中读取结构体类型的数据
	printf("姓名是:%s,年龄是%d\n", ooo.name, ooo.age);
	fclose(pFile);
	return 0;
}
文件的读写
  fgets();---读文件
  char *fgets(char * _Buf,int _MaxCount, FILE * _File);
  参数:_Buf需要写入文件的字符串
       _MaxCount:读取字符的最大个数
	   _File:文件指针.
  返回值: 如果成功返回_Buf的字符串首地址
         //如果失败返回EOF.文件错误  
		 失败返回NULL.
  fputs();---写文件
  int fputs(const char * _Str,  FILE * _File);
  参数:_Str写入到文件的字符串.
      _File:文件指针.
  返回值成功返回非负整数失败返回EOF.(-1)

文件偏移

文件偏移:(相当于文件中光标的移动)
ftell();–返回文件中光标的位置,返回文件偏移位置.
long ftell(FILE * _File);
fseek()—把文件中光标移动到指定的位置(移动文件偏移到指定位置)
int fseek(FILE * _File, long _Offset,int _Origin);
参数: _File文件指针
_Offset:偏移的位置
_Origin:偏移的起始位置.
SEEK_CUR 1 当前位置
SEEK_END 2 文件末尾
SEEK_SET 0 文件开头
void rewind(Inout FILE * _File);—把光标移动到文件开始位置

//文件偏移操作代码
#include <stdio.h>

int main4()
{
	FILE* pFile = NULL;   //ini格式需要自行学习
	if (pFile = fopen("liguangbiao.ini", "r+"))
	{
		fseek(pFile, 0, SEEK_END);  //尾部偏移
		printf("文件偏移 %d", ftell(pFile));
	}
	rewind(pFile);
	fclose(pFile);
	return 0;
}
文件关闭
  fclose()

实现文件拷贝功能代码

#include <stdio.h>
#include <string.h>
//文件拷贝功能.
int main1()
{
  //读取第一个文件内容拷贝到第二个文件中.
  FILE* pF1 = fopen("danny.txt", "r");
  if (!pF1)
  {
  	printf("打开文件失败\n");
  	return 0;
  }
  //第二个文件,把第一个文件内容拷贝到第二个文件中.
  FILE* pF2 = fopen("xiaqi.txt", "w");

  while (1)//caadef\0
  {
  	//char buf[10] = { 0 };
  	//fputs(fgets(buf, 9, pF1), pF2);
  	
  	char buf[10] = { 0 };
  	if (NULL != fgets(buf, 9, pF1))
  	{
  		fputs(buf, pF2);
  	}			
  	else
  	{
  		break;
  	}
  		
  }
  fclose(pF1);
  fclose(pF2);
  return 0;
}

文件操作演示代码

#include <stdio.h>
//

int main()
{
	FILE* pFile = fopen("danny.av","r+");
	if (!pFile)
	{
		printf("文件打开失败\n");
		return 0;
	}
	//
	char xx = fgetc(pFile);
	printf("xx = %c\n", xx);
	xx = fgetc(pFile);
	printf("xx = %c\n", xx);
	fclose(pFile);

	pFile = fopen("danny.av", "r+");
	fputc(65, pFile);
	//关闭并保存
	fclose(pFile);
	return 0;
}

其他演示

对文件进行加密操作,例,如果文件中有abcd这样的字符,把文件内容读取之后,对字符按照如下
//方式进行加密:a + 1,b + 2,c + 3,d + 4 变成bdgh 后重新写入文件


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

int main()
{
    //首先需要打开文件
	FILE* pFile = fopen("danny.txt", "r+");
	if (NULL == pFile)
	{
		printf("文件打开失败!\n");
	}
	//读取文件内容
	char ch = 0;  //ch得到文件中的字符
	char ch1 = 0; //ch1得到文件中的字符
	int count = 0;
	for (int i = 0; ch != EOF; i++)
	{
		ch = fgetc(pFile);
		printf("%c", ch);
		count ++;	
	}
	printf("\n");
	printf("有%d个字符!\n", count);
	fclose(pFile);
	pFile = fopen("danny.txt", "r+");
	if (NULL == pFile)
	{
		printf("文件打开失败!\n");
	}
	char* change = (char*)malloc(sizeof(char)*count);//动态申请数组的大小
	//对文件中的内容进行写入操作 在原有的内容中依次加上一个值
	for (int n = 0; n < count; n++)
	{
		ch1 = fgetc(pFile);//再次得到文件中的字符
		ch1 += n + 1;          //对文件中的字符依次加n
		change[n] = ch1;    //将得到的字符存入数组change中
		printf("%c", change[n]);
	}
	fclose(pFile);//先关闭文件
	pFile = fopen("danny.txt", "w");//再次打开文件并清空文件的内容
	for (int i = 0; i < count; i++)
	{
		fputc(change[i], pFile);将数组change中的值存入danny.txt中
	}
	//操作完成,文件需要关闭
	fclose(pFile);
	free(change);//释放申请的内存
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值