今天测试阿里云OSS文件上传接口,用fstream获取文件指针,代码如下
std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(__FILE__, std::ios::in);
该代码读取当前文件,拿到文件指针content,测试没有问题
但是后面讲__FILE__改为某个dwg文件后测试,总是只能上传一部分。
分析过程,肯定是文件读取不完整,提前读到了文件结尾导致的,改为如下方式后读取上传成功
std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(localFiePath, std::ios::in | std::ios::binary);
即添加 std::ios::binary,表示按二进制文件读取。
所以,就像C的fopen函数一样,fstream如果不指定打开方式,默认会以文本方式打开文件,此时对于二进制文件就会出现提前读取结束的问题。