C/C++文件读写常用API

本文介绍了C/C++中进行文件读写的相关API,包括C风格的fopen和C++的fstream类,以及读取、写入、关闭文件的操作。同时讲解了如何获取文件大小,文件重定向以及其他的文件管理函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、1、C/C++文件读写类

#include<fstream>	// C++头文件
std::fstream、std::ifstream、std::ofstream //C++风格
#include<stdio.h>	// C 头文件
#include<stdlib.h>
FILE //C风格

2、C/C++打开文件操作

1、C风格打开文件

C风格宽字节文本

std::wstring wPath(L"blah");
FILE *fp = _wfopen(wPath.c_str(), L"r");	

C风格窄字节文本

std::string Path("blah");
FILE *fp = fopen(Path.c_str(), "r");

C风格打开模式

“r”(只读)	为了输入数据,打开一个已经存在的文本文件
“w”(只写)	为了输出数据,打开一个文本文件	建立一个新的文件
“a”(追加)	向文本文件尾添加数据	建立一个新的文件
“rb”(只读)	为了输入数据,打开一个二进制文件
“wb”(只写)	为了输出数据,打开一个二进制文件

2、C++风格打开文件

C++风格宽字节1

//C++宽字节路径,wifstream读取文件内部的宽字节字符
std::wstring wPath(L"blah");
std::wifstream ifs(wPath.c_str(), std::wifstream::in | std::wifstream::binary);

C++风格宽字节2

std::wstring wPath(L"blah");
std::ifstream ifs(wPath.c_str(), std::ios::in | std::ios::binary);// 宽字节路径

C++风格窄字节

std::string Path("blah");
std::ifstream ifs(Path.c_str(), std::ios::in | std::ios::binary);// 窄字节路径

C++打开文件模式

ios_base::in	以读取方式打开文件。
ios_base::out	以写入方式打开文件。
ios_base::binary	以二进制模式打开文件。
ios_base:: ate	打开文件的时候,定位到文件的末尾。
ios_base:: app	以追加方式打开文件,所有写文件的数据都是追加在文件末尾。
ios_base::trunc	打开文件时,但是文件之前的内容都会被清空

3、读取文件操作

fgetc(file);	// C风格,从文件流中获取1个字符
fgets(data,1,file);// C风格,从文件流获取多个字符
fscanf(file,"%s %" PRId64 ,buffer,&count);	// 格式化读取
fread();//C风格,
getline (file, line);	//C++,行读取

4、写入常用API

fputc('s', file);// C风格,写入一个字符到文件
fputs ("test",file);//C风格,写入到文件;
fprintf(file, "Hello %s\n", name );//C风格,格式化写入文件
fwrite(data, size, 1, file);// C风格,按字节大小写入文件
file<<"string"; 		//C++ 写入到文件。
file.read(data, size);	// 写入size大小的数据到文件

5、文件关闭

fclose(file);	// C风格关闭文件
file.close(); 	// C++关闭文件函数。

6、获取文件大小

方法1:C指针偏移

#include <stdio.h>
FILE *fp = fopen("/usr/bin/ls", "r");
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
//_fseeki64可以兼容x64项目和x86项目,fseek只能兼容x86项目
int errer = _fseeki64(fp, 0, SEEK_END);
fileSize = _ftelli64(fp);

方法2:C++指针偏移

std::ifstream inFile(fileName, std::wifstream::in | std::wifstream::binary);
inFile.seekg(0, std::ios_base::end);
std::streampos fileSize = inFile.tellg();

方法3:使用 stat

#include <stdio.h>
#include <sys/stat.h>   //stat()
struct stat statbuf;
stat("/usr/bin/ls", &statbuf);
long size = statbuf.st_size;

方法4:使用 filelength

FILE* file = fopen(filepath, L"rb");
long size = filelength(fileno(file));

7、文件重定向和恢复重定向

windows下文件重定向和恢复重定向

#include <stdio.h>  
#include <stdlib.h>  
  
int main(int argc, char *agrv[])  
{  
    freopen("ExampleIn","r",stdint);   
    freopen("ExampleOut","w",stdout);  
    /*       program        */  
    freopen("CON","r",stdint);  
    freopen("CON","w",stdout);  
    printf("succeed!/n");  
    return 0;  
}  

linux下文件重定向和恢复重定向

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

int main(int argc, char *agrv[])
{
	freopen("ExampleIn","r",stdint); 
	freopen("ExampleOut","w",stdout);
	/*             program              */
	freopen("/dev/tty","r",stdint);
	freopen("/dev/tty","w",stdout);
	printf("succeed!/n");
	return 0;
}

8、其他文件操作

bool is_open();	//	判断文件是否已经打开
bool eof();		//判断是否到达文件尾部
rewind();		//让文件指针的位置回到文件的起始位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值