使用字符串作为文件容器
using a string as a file container
我用一个字符串(mystring)把文件的内容放在上面:
std::ofstream fs("C:\example.mp4",std::ios::binary);
fs << mystring;
fs.close();
这适用于几个例子,我想知道为什么?(即使是包含零的文件,例如 png 文件),我的意思是二进制文件已正确保存在 HDD 上......
否则,我使用 size() 方法来确定字符串包含的数据的大小以便上传它,...我知道在某些二进制文件中有零("\O"),我读到此方法类似于 length(),因此如果找到"\0",它将停止计数?但即使在这种情况下,我的应用程序也可以工作,我的意思是,size() 给了我数据的真实大小(二进制文件),在这种情况下,我想精确地使用这种类型的结构:
//...
std::ifstream::pos_type fileSize = ifs.tellg();
std::vector<char> bytes(fileSize);
//...
myifstream.read(&bytes[0], fileSize);
file_content = std::string(&bytes[0], fileSize);
所以 size() 将返回 myifstream.tellg() 的值? 并且直到找到"\0"才计数?
在另一种情况下,服务器向我发送数据(char*),我使用append(data,size)将它们复制到字符串中...即使有零,它也总是有效的。
我想确保使用字符串对象来操作文件内容是安全的。(文件流和大小() )
您可能最好将std::vector<uint8_t>
用于字节流而不是字符串,不是因为字符串不起作用,而是因为在语义上,字符串用于文本字符串,即您可能会推送到cout
的东西。
要回答你的第一个问题,string
的基础数据类型只是一个char
数组,所以读取没有可打印字符的数据仍然有效,但如果你试图打印它,它(很可能)是胡言乱语。 据我所知,一次读取和重新打印一个字节的文件并不是其他未定义的行为,但是如果我错了,有人可以纠正我。
至于如何处理空值,链接的问题回答了这一点,但基本上string
无论如何都会跟踪它的大小,所以没有理由强迫它们以空字符结尾。
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 如何打开并写入一个名称取自C++中字符串的文件
- 如何从二进制文件中读取字符串
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将字符串与文件上的数据进行比较
- 用户输入字符串的文件附加问题..C++
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 使用文件内容作为硬编码字符串
- 将文件复制到自定义位置,存在字符串转换问题
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 声明要在 qml 和 cpp 文件中使用的全局字符串
- C 通过char读取文件字符串的文件char;崩溃
- 我不明白如何将 toupper 和 isalpha 与.txt文件字符串输入一起使用
- 在 CPP 文件中使用 make 文件字符串变量
- 编译 PyGAMMA Mac Lion:g++ 找不到标准的 C++ 头文件(字符串/iostream..)
- 如何在c++中使用文件字符串作为命令
- 使用 TinyXML 解析 XML 文件字符串
- 递归下降解析器帮助(不读取文本文件字符串)