ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅谈一些与文件相关的函数

2019-02-22 20:54:13  阅读:291  来源: 互联网

标签:文件 浅谈 pFile int FILE SEEK 函数


一、fopen函数

1.1 使用格式

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

1.2 函数的功能
打开文件(open file)
打开名称在参数filename中指定的文件,并将其与可在将来操作中通过返回的FILE指针识别的流相关联。

流上允许的操作及其执行方式由mode参数定义。如果已知未引用交互式设备(请参阅setbuf),则默认情况下,返回的流将完全缓冲。 可以通过调用fclose或freopen将返回的指针与文件解除关联。正常程序终止时,所有打开的文件将自动关闭。

1.3 函数参数

文件名(filename)
包含要打开的文件名的C字符串。
其值应遵循运行环境的文件名规范,并且可以包含路径(如果系统支持)。

模式(mode)

模式 功能
“r” read:打开文件进行输入操作。该文件必须存在。
“w” write:为输出操作创建一个空文件。如果已存在具有相同名称的文件,则会丢弃其内容,并将该文件视为新的空文件。
“a” append:打开文件末尾的输出文件。输出操作总是在文件末尾写入数据,并将其扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。如果文件不存在,则创建该文件。
“r+” read/update:打开文件进行更新(包括输入和输出)。该文件必须存在。
“w+” write/update:创建一个空文件并打开它进行更新(包括输入和输出)。如果已存在具有相同名称的文件,则会丢弃其内容,并将该文件视为新的空文件。
“a+” append / update:打开一个文件进行更新(包括输入和输出),所有输出操作都在文件末尾写入数据。重新定位操作(fseek,fsetpos,rewind)会影响下一个输入操作,但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。

1.4 返回值
如果文件成功打开,则该函数返回指向FILE对象的指针,该对象可用于在将来的操作中标识流。
否则,返回空指针。
在大多数库实现中,errno变量也会在失败时设置为特定于系统的错误代码。

1.5 使用案例

/* fopen example */
#include <stdio.h>
int main()
{
	FILE * pFile;
	pFile = fopen("myfile.txt", "w");
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		fclose(pFile);
	}
	return 0;
}

二、fclose函数

2.1 使用格式

int fclose(FILE * stream);

2.2 函数功能

关闭文件(一般与fopen函数配套使用)
关闭与流关联的文件并取消关联。
与流关联的所有内部缓冲区都与其解除关联并刷新:写入任何未写入的输出缓冲区的内容,并丢弃任何未读输入缓冲区的内容。
即使调用失败,作为参数传递的流也将不再与文件及其缓冲区相关联。
2.3 函数参数

stream
指向FILE对象的指针,指定要关闭的流。

2.4 函数返回值
如果成功关闭流,则返回零值。
失败时,返回EOF。

2.5 使用案例

/* fclose example */
#include <stdio.h>
int main()
{
	FILE * pFile;
	pFile = fopen("myfile.txt", "wt");
	fprintf(pFile, "fclose example");
	int ret = fclose(pFile);
	printf("%d\n", ret);
	return 0;
}

fclose函数使用

三、fputs函数

3.1 使用格式

int fputs(const char * str,FILE * stream);

3.2 函数功能

将字符串写入流
写C字符串被指出STR的数据流。
该函数从指定的地址(str)开始复制,直到到达终止空字符(’\0’)。此终止空字符不会复制到流中。
注:fputs与puts有所不同,因为可以指定目标流,而且fputs不会写入其他字符,而puts会自动在末尾添加换行符。

3.3 函数参数
str
带有要写入流的内容的C字符串。
stream
指向标识输出流的FILE对象的指针。

3.4 函数返回值
成功时,返回非负值。
出错时,该函数返回EOF并设置错误指示符(ferror)。

3.5 使用案例

/* fputs example */
#include <stdio.h>

int main()
{
	FILE * pFile;
	char sentence[256];

	printf("Enter sentence to append: ");
	fgets(sentence, 256, stdin);
	pFile = fopen("mylog.txt", "a");
	fputs(sentence, pFile);
	fclose(pFile);
	return 0;
}

fputs函数使用

四、fseek函数

4.1 使用格式

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

4.2 函数功能

重新定位流位置指示器
将与流关联的位置指示器设置为新位置。

1、对于以二进制模式打开的流,通过将偏移添加到由origin指定的参考位置来定义新位置。
2、对于在文本模式下打开的流,offset应为零或前一次调用ftell返回的值,而origin必须为SEEK_SET。

4.3 函数参数

stream
指向标识流的FILE对象的指针。
offset
二进制文件:从原点偏移的字节数。
文本文件:零或ftell返回的值。
origin
位置用作偏移的参考。它由中定义的以下常量之一指定,专门用作此函数的参数:

constant Reference position
SEEK_SET 文件开头
SEEK_CUR 文件指针的当前位置
SEEK_END 文件结束

允许库实现无意义地支持SEEK_END(因此,使用它的代码没有真正的标准可移植性)。

4.4 函数返回值
如果成功,该函数返回零。
否则,它返回非零值。
如果发生读或写错误,则设置错误指示符(ferror)。

4.5 使用案例

/* fseek example */
#include <stdio.h>

int main()
{
	FILE * pFile;
	pFile = fopen("example.txt", "wb");
	fputs("This is an apple.", pFile);
	fseek(pFile, 9, SEEK_SET);
	fputs(" sam", pFile);
	fclose(pFile);
	return 0;
}

fseek函数使用
下面我们来看一个关于fseek函数的题目
牛客网专项练习
解析:int fseek(FILE *stream, long offset, int fromwhere);描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。返回值: 成功,返回0,否则返回其他值。
第一个参数stream为文件指针。
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移。
第三个参数origin设定从文件的哪里开始偏移
SEEK_SET: 文件开头,
SEEK_CUR: 当前位置,
SEEK_END: 文件结尾。
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2)
因此,fseek(fp,-20L,2)的含义是把文件指针fp指向文件结尾偏移-20字节处。

标签:文件,浅谈,pFile,int,FILE,SEEK,函数
来源: https://blog.csdn.net/chenxiyuehh/article/details/87885371

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有