C/C++文件读写常用API
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(); //让文件指针的位置回到文件的起始位置。