今天在想通过tcp socket 来send一个视频文件时,最初我像往常一样使用getline来获取数据发送,然后发现客户端收到的是不完整的。通过c++输入文件流ifstream用法详解-CSDN博客
所以会有数据丢失。后面我通过char[size+1]来存放数据,然后发现数据并没有存入,后面改用vector<char>才能看到数据。
//成功读取到的版本
std::vector<char> readFile(const std::string &recource) { std::ifstream in(recource, std::ifstream::binary); if(!in.is_open()) return std::vector<char>(); // 移动到文件末尾以获取文件大小 in.seekg(0, std::ios::end);// 也可在 in的打开方式 | std::ios::ate std::streamsize size = in.tellg(); // 回到文件开头 in.seekg(0, std::ios::beg); std::cout<<size<<'\n'; // 使用 vector 分配足够的内存来存储文件内容 std::vector<char> buffer(size); in.read(buffer.data(), size); in.close(); return buffer; }
//最开始错误的版本
std::string readFile(const std::string &recource) { std::ifstream in(recource, std::ifstream::binary); if(!in.is_open()) return "404"; std::string content; std::string line; while(std::getline(in, line)) content += line; in.close(); return content; }