c 文件读写

1、fopen_s

描述:
       打开文件。

定义:

errno_t fopen_s(FILE** stream, char const* fileName, char const* mode);

参数:
       stream - 指向控制打开的文件流的对象的指针
       filename - 要关联文件流到的文件名
       mode - 确定文件访问模式

文件访问模式字符串含义解释若文件已存在的行动若文件不存在的行动
“r”为读取打开文件从起始读取打开失败
“rb”以二进制模式读为读取打开文件从起始读取打开失败
“w”为写入创建文件销毁内容创建新文件
“wb”以二进制模式写为写入创建文件销毁内容创建新文件
“a”追加追加到文件写入到末尾创建新文件
“r+”扩展读为读取/写入打开文件从起始读取错误
“w+”扩展写为读取/写入创建文件销毁内容创建新文件
“a+”扩展追加为读取/写入打开文件写入到末尾创建新文件

返回值:
       打开成功返回0,打开失败返回非0值。

2、fseek

描述:
       设置流文件 stream 位置标识符的当前值。

定义:

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

参数:
       stream - 指向控制打开的文件流的对象的指针
       offset - 偏移量。整数表示正向偏移,负数表示负向偏移。
       whence- 设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

常量描述
SEEK_SET文件的开头
SEEK_CUR文件指针的当前位置
SEEK_END文件的末尾

返回值:
       如果成功,则该函数返回0,否则返回非0值。

3、ftell

描述:
       获取指定流 stream 的当前文件位置。

定义:

long int ftell(FILE *stream)

参数:
       stream - 指向控制打开的文件流的对象的指针

返回值:
       返回位置标识符的当前值。如果发生错误,则返回 -1。

4、fread

描述:
       读取文件数据。

函数定义:

size_t fread( void* buffer, size_t size, size_t count, std::FILE* stream );

参数:
       buffer - 指向要读取的数组中首个对象的指针
       size - 每个对象的字节大小
       count - 要读取的对象数
       stream - 读取来源的输入文件流

返回值:
       返回成功读取的对象数,若出现错误或文件尾条件,则可能小于 count 。

5、fwrite

描述:
       写入文件数据。

函数定义:

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

参数:
       buffer - 指向数组中要被写入的首个对象的指针
       size - 每个对象的大小
       count - 要被写入的对象数
       stream - 指向输出流的指针

返回值:
       返回成功写入的对象数,若错误发生则可能小于 count 。

6、fclose

描述:
       关闭文件。

函数定义:

int fclose( FILE* stream );

参数:
       stream - 要关闭的文件流

返回值:
       成功时为 ​0​ ,否则为 EOF 。

7、示例:读取文件数据

#include <iostream>

int main(int argc, char **argv)
{
	//1、打开文件
	FILE* pFile = nullptr; 
	int nRt = fopen_s(&pFile,"E:\\01-work\\temp\\微信图片.jpg", "rb");
	if (nRt != 0)
	{
		std::cout << "打开文件失败" << std::endl;
		return -1;
	}

	//2、获取文件大小
	fseek(pFile,0,SEEK_END);
	int nFileSize = ftell(pFile);
	fseek(pFile,0,SEEK_SET);

	char* pBuf = new char[nFileSize];
	memset(pBuf,0,nFileSize);

	//3、读取文件数据
	int nDataSize = fread(pBuf,sizeof(char),nFileSize,pFile);
	if (nDataSize < nFileSize)
	{
		fclose(pFile);
		delete pBuf;
		std::cout << "读取文件失败" << std::endl;
		return -1;
	}

	//4、关闭文件
	fclose(pFile);
	delete pBuf;

	std::cout << "读取文件成功" << std::endl;

	return 0;
}

8、示例:写入文件数据

#include <iostream>

int main(int argc, char **argv)
{
	int nFileSize = 1024;	//文件大小
	char* pBuf = new char[nFileSize];
	memset(pBuf, 1, nFileSize);

	//1、打开文件
	FILE* pFile = nullptr; 
	int nRt = fopen_s(&pFile,"E:\\01-work\\temp\\test.txt", "wb");
	if (nRt != 0)
	{
		std::cout << "打开文件失败" << std::endl;
		return -1;
	}

	//2、写入文件数据
	int nDataSize = fwrite(pBuf,sizeof(char),nFileSize,pFile);
	if (nDataSize < nFileSize)
	{
		fclose(pFile);
		delete pBuf;
		std::cout << "写入文件失败" << std::endl;
		return -1;
	}

	//3、关闭文件
	fclose(pFile);
	delete pBuf;

	std::cout << "写入文件成功" << std::endl;

	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值