例子// 读取 YUV 数据uint32_tsizewidth*height*3/2;std::vectorunsignedcharin_buf(size),out_buf(size);std::ifstreamifs(path,std::ios::binary);if(!ifs){std::cerrOpen failed: pathstd::endl;return-1;}ifs.read((char*)in_buf.data(),size);详细介绍std::ifstreamstd::ifstream是 C 标准库中的一个类全称是input file stream输入文件流属于fstream头文件专门用于从文件中读取数据。它是 C 面向对象的文件操作核心类你可以把它理解成一个专门用来读文件的“工具对象”自带打开、读取、关闭、检查错误等所有文件操作功能。1. 完整定义与归属定义在标准头文件fstream属于命名空间std完整写法std::ifstream父类继承关系std::istream (通用输入流) ↑ std::ifstream (文件输入流)这意味着它拥有所有 cin标准输入的用法同时额外增加了文件操作功能。2. 核心作用std::ifstream唯一的用途✅以各种方式读取文件里的数据文本、二进制、图片、视频、音频都可以❌ 不能用来写文件写文件用std::ofstream3. 常用构造函数创建对象的方式1空对象之后再打开std::ifstream ifs;// 创建对象ifs.open(test.yuv);// 手动打开文件2创建时直接打开文件最常用std::ifstreamifs(文件路径,打开模式);你代码里的写法std::ifstreamifs(path,std::ios::binary);path文件路径字符串std::ios::binary二进制模式打开不转换换行符原样读字节4. 最常用的成员函数①read()—— 读取二进制数据你代码里用的ifs.read(缓冲区指针,要读取的字节数);专门用来读取图片、视频、结构体、二进制文件一次读取指定长度的字节不会做任何格式转换你代码ifs.read((char*)in_buf.data(),size);含义从文件读size个字节存入in_buf数组。②operator—— 读取文本类似 cininta;ifsa;// 从文件读一个整数std::string s;ifss;// 从文件读一个字符串③getline()—— 按行读取文本std::string line;std::getline(ifs,line);④is_open()/!ifs—— 判断是否打开成功if(!ifs){// 打开失败}// 等价于if(!ifs.is_open()){}⑤close()—— 手动关闭文件ifs.close();注意ifstream对象销毁时会自动关闭文件通常不需要手动调用。5. 重要打开模式配合ifstream使用控制怎么读文件模式作用std::ios::in默认模式只读打开std::ios::binary二进制模式必须加读图片/视频/任意原始字节std::ios::ate打开后直接跳到文件末尾你代码里的binary非常关键不加会把文件当作文本自动转换换行符破坏图片/视频数据加原样读取所有字节适合 YUV、RGB、H.264 等二进制格式6. 与std::istream/cin的关系std::cin是控制台输入流std::ifstream是文件输入流两者用法几乎一样// 从控制台读inta;std::cina;// 从文件读一模一样intb;std::ifstreamifs(a.txt);ifsb;7. 简单总结std::ifstream是什么是 C 标准库提供的类专门用于读取文件面向对象、安全、自动管理资源支持文本读取和二进制读取用ios::binary才能正确读取图像、视频等非文本文件不需要手动关闭文件对象析构时自动关闭对应你代码的作用std::ifstreamifs(path,std::ios::binary);这一行就是创建一个文件输入流对象以二进制只读模式打开 YUV 图像文件准备读取原始字节数据。最终总结std::ifstream是C 标准库中用于读文件的输入流类必须包含fstream它继承自std::istream拥有和cin一致的读取语法ios::binary是读取二进制文件图像/视频的必备模式它会自动管理文件打开/关闭是 C 最安全、最常用的文件读取方式
【C++】介绍 std::ifstream 输入文件流
例子// 读取 YUV 数据uint32_tsizewidth*height*3/2;std::vectorunsignedcharin_buf(size),out_buf(size);std::ifstreamifs(path,std::ios::binary);if(!ifs){std::cerrOpen failed: pathstd::endl;return-1;}ifs.read((char*)in_buf.data(),size);详细介绍std::ifstreamstd::ifstream是 C 标准库中的一个类全称是input file stream输入文件流属于fstream头文件专门用于从文件中读取数据。它是 C 面向对象的文件操作核心类你可以把它理解成一个专门用来读文件的“工具对象”自带打开、读取、关闭、检查错误等所有文件操作功能。1. 完整定义与归属定义在标准头文件fstream属于命名空间std完整写法std::ifstream父类继承关系std::istream (通用输入流) ↑ std::ifstream (文件输入流)这意味着它拥有所有 cin标准输入的用法同时额外增加了文件操作功能。2. 核心作用std::ifstream唯一的用途✅以各种方式读取文件里的数据文本、二进制、图片、视频、音频都可以❌ 不能用来写文件写文件用std::ofstream3. 常用构造函数创建对象的方式1空对象之后再打开std::ifstream ifs;// 创建对象ifs.open(test.yuv);// 手动打开文件2创建时直接打开文件最常用std::ifstreamifs(文件路径,打开模式);你代码里的写法std::ifstreamifs(path,std::ios::binary);path文件路径字符串std::ios::binary二进制模式打开不转换换行符原样读字节4. 最常用的成员函数①read()—— 读取二进制数据你代码里用的ifs.read(缓冲区指针,要读取的字节数);专门用来读取图片、视频、结构体、二进制文件一次读取指定长度的字节不会做任何格式转换你代码ifs.read((char*)in_buf.data(),size);含义从文件读size个字节存入in_buf数组。②operator—— 读取文本类似 cininta;ifsa;// 从文件读一个整数std::string s;ifss;// 从文件读一个字符串③getline()—— 按行读取文本std::string line;std::getline(ifs,line);④is_open()/!ifs—— 判断是否打开成功if(!ifs){// 打开失败}// 等价于if(!ifs.is_open()){}⑤close()—— 手动关闭文件ifs.close();注意ifstream对象销毁时会自动关闭文件通常不需要手动调用。5. 重要打开模式配合ifstream使用控制怎么读文件模式作用std::ios::in默认模式只读打开std::ios::binary二进制模式必须加读图片/视频/任意原始字节std::ios::ate打开后直接跳到文件末尾你代码里的binary非常关键不加会把文件当作文本自动转换换行符破坏图片/视频数据加原样读取所有字节适合 YUV、RGB、H.264 等二进制格式6. 与std::istream/cin的关系std::cin是控制台输入流std::ifstream是文件输入流两者用法几乎一样// 从控制台读inta;std::cina;// 从文件读一模一样intb;std::ifstreamifs(a.txt);ifsb;7. 简单总结std::ifstream是什么是 C 标准库提供的类专门用于读取文件面向对象、安全、自动管理资源支持文本读取和二进制读取用ios::binary才能正确读取图像、视频等非文本文件不需要手动关闭文件对象析构时自动关闭对应你代码的作用std::ifstreamifs(path,std::ios::binary);这一行就是创建一个文件输入流对象以二进制只读模式打开 YUV 图像文件准备读取原始字节数据。最终总结std::ifstream是C 标准库中用于读文件的输入流类必须包含fstream它继承自std::istream拥有和cin一致的读取语法ios::binary是读取二进制文件图像/视频的必备模式它会自动管理文件打开/关闭是 C 最安全、最常用的文件读取方式