关于文件操作的一些读写函数

最近学习了关于文件操作的一些函数,顺手整理一下:

1(打开 fopen 函数:它的作用就是打开一个你需要的文件,括号里面的一个参数,表示要打开的文件,第二个参数表示以什么形式打开,

FILE * fopen ( const char * filename, const char * mode )

举个例子:

FILE * pFile;
  pFile = fopen ("myfile.txt","w")

就是指打开myfile这个文件,用写的形式打开。(假如文件夹里面没有这个文件,用'w'的形式打开,可以在文件夹下创建一个myfile文件。

2(写入)fputs 一个可以往任何 文件中输出信息的接口

它的作用就是通往特定的指针,打印其内容:

int fputs ( const char * str, FILE * stream );
第一个参数是你写的字符串是什么,第二个参数就是你想往哪里写 ;

举个例子

int main()

{

	FILE *fp = fopen("log.txt", "w");

	if (fp == NULL);

	{

	/*	perror("fopen");*/

		return 1;
	}

	fputs("abcd 1234", fp);

	fclose(fp);

	return 0;
	system("pause");
	return 0;

}

注意”w''是清空式写入,就是说这一次的写入前会将之前的信息清空。

3文件读取函数 主要分为文本读取,和二进制读取;

1 文本读取: 

1 fputc

int fputc ( int character, FILE * stream );

与上面的fputs一样,第一个参数是你想写入的内容,第二个参数是你想往那里写入;

不过它的操作针对单个字符,输出这样的结果

2 fgetc 就是从文件里获得字符

它的返回值就是返回你要读取的字符,碰到EOF就表示已经读取到文件尾;

3 fprintf()

int fprintf ( FILE * stream, const char * format, ... );

fprintf() 其实与printf()类似,也是输出,不过它是格式化输出,它的第一个参数是 你要把哪些输出的内容写到哪个文件上,第个参数就是输出的形式。

举个例子:

 

 

4 f scanf()

int fscanf ( FILE * stream, const char * format, ... );

是指从特定的文件格式化输入;第一个参数就是表示你数据源来自键盘还是文件;

二进制读取函数:

1fread 表示二进制读取(内容修改);

size_fread ( void * ptr, size_t size, size_t count, FILE * stream )

第四个参数代表本次读取想要从那里读,参数三代表读取的总字节大小,参数二表示一次读取的字节大小,参数一(指向一段缓冲区)代表你要读取的内容存放在哪里。它的返回值如果大于0 就表示读取成功。

2  fwrite 表示二进制写入(内容修改)

 fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

第一个参数代表你要写入的文件的起始地址,第二个参数代表一次写入的字节的大小,第三个参数表示要写入的总字节的大小,第四个参数表示你要往哪里写;它的返回值大于0 表示读取成功。

 

3 fseek(属性修改)

int fseek ( FILE * stream, long int offset, int origin )

它的作用是:根据文件指针的位置和偏移量来定位文件指针(可以更改文件对应的读写位置)

第一个参数表是你要改的文件指针,第二个文件读取时的偏移量,这个偏移量相对于第三个参数而言。

第三个参数的取值有:

分别文件的当前位置,目前指针所指向的文件位置,文件的节尾。

4 ftell 属性修改)

它的作用是 可以根据文件指针的位置和偏移量来定位文件指针。

就是说我们将文件里的内容看作一行,利用文件指针可以看到具体偏移量。

5 rewind

作用就是让文件指针的位置回到起始位置。

接下来举个列子将以上函数都使用一下,加深理解;

#include<stdio.h>
#include<windows.h>
#pragma warning (disable:4996)
int main()
{//1open
	FILE *src = fopen("lena.png", "rb");
	if (src == NULL)
	{
		perror("fopen");
		return 1;
	}
	FILE *dst= fopen("lena_copy.png", "wb");
	if (dst== NULL)
	{
		perror("fopen");
		return 2;
	}
	//2 copy
	/*char buf[1024];
	int n = 0;
	while ((n = fread(buf, 1, 1024, src)) > 0)
	{
		fwrite(buf, 1, n, dst);
	}
	if (feof(src)){
		printf("read src fileend!\n ");

	}*/
	fseek(src, 0, SEEK_END);
	int size = ftell(src);
	rewind(src);
	char*file_content = (char*)malloc(size);
	if (file_content == NULL)
	{
		perror("malloc");
		return 3;
	}
	fread(file_content, size, 1, src);
	fwrite(file_content, 1, size, dst);
	//3 close 
	fclose(src);
	fclose(dst);
	free(file_content);

	system("pause");
	return 0;
}

结果:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值