stl C++文件读写

描述:
       c++的ifstream和ofstream输入输出流对文件的读写与C语言差不多,基本都是打开文件、读取/写入文件、关闭文件。在c++参考手册中看到有许多函数方法,应该是比C语言的fopen功能更多。这里就不多说了,将基本的读写代码放在这里,用到的时候再深研吧。
       再补充一句,stl对多字节和宽字节都有对应的类。std::ifstream、std::wifstream、std::ofstream、std::wofstream、std::fstream、std::wfstream

打开方式:
       这些方式可以用运算符 “|” 组合使用。

常量 解释
ios::in input 为输入(读)而打开文件,文件不存在则创建(ifstream默认的打开方式)
ios::out output 为输出(写)而打开文件,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
ios::ate at end 文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用
ios::app append 供写使用,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后
ios::trunc truncate 丢弃打开前文件存在的内容(默认)
ios::nocreate 文件不存在时产生错误,常和in或app联合使用
ios::noreplace 文件存在时产生错误,常和out联合使用
ios::binary 二进制格式文件

示例:

int main()
{
     
	std::ifstream fileIn;		//输入流(读取文件数据)
	std::ofstream fileOut;		//输出流(写入文件数据)

	//打开文件
	fileIn.open("E:\\temporary\\老杨.jpeg",std::ios::binary);
	if (!fileIn.is_open())
	{
     
		std::perror("fileIn.open");
		std::exit(0);
	}
	fileOut.open("E:\\temporary\\老杨2.jpeg", std::ios::binary);
	if (!fileOut.is_open())
	{
     
		fileIn.close();
		std::perror("fileOut.open");
		std::exit(0);
	}

	fileIn.seekg(0, std::ios::end);	//设置文件末尾位置
	unsigned long long ullLength = fileIn.tellg();	//得到文件长度
 	fileIn.seekg(0, std::ios::beg);	//设置文件起始位置

	//一次全部读取文件(已测试成功)
// 	char* buffer = new char[ullLength];
// 	fileIn.read(buffer, ullLength);	//读文件
	
	//一次全部写入文件(已测试成功)
//	fileOut.write(buffer, ullLength);	//写文件

	//循环读取文件,循环写入文件
 	int nSize = 1024;	//每次读写文件元素的大小
 	char* buffer = new char[nSize];
	while (!fileIn.eof())
	{
     
		std::memset(buffer, 0, nSize);
		fileIn.read(buffer, nSize);		//读取文件数据
		ullLength -= nSize;
		if (ullLength <= nSize)
			fileOut.write(buffer, ullLength);	//写入文件数据
		else
			fileOut.write(buffer, nSize);		//写入文件数据
	}

	//释放内存
	delete[]buffer;

	//关闭文件
	fileIn.clear();
	fileIn.close();
	fileOut.clear();
	fileOut.close();

	std::cout << "拷贝成功" << std::endl;

	return 0;
 }

你可能感兴趣的:(stl)