【发布时间】:2013-04-16 15:28:23
【问题描述】:
读者和作者
#include<string>
#include<fstream>
#include<memory>
class BinarySearchFile{
BinarySearchFile::BinarySearchFile(std::string file_name){
// concatenate extension to fileName
file_name += ".dat";
// form complete table data filename
data_file_name = file_name;
// create or reopen table data file for reading and writing
binary_search_file.open(data_file_name, std::ios::binary); // create file
if(!binary_search_file.is_open()){
binary_search_file.clear();
binary_search_file.open(data_file_name, std::ios::out | std::ios::binary);
binary_search_file.close();
binary_search_file.open(data_file_name), std::ios::out | std::ios::in | std::ios::binary | std::ios::ate;
}
std::fstream binary_search_file;
void BinarySearchFile::writeT(std::string attribute){
if(binary_search_file){
binary_search_file.write(reinterpret_cast<char *>(&attribute), attribute.length() * 2);
}
}
std::string BinarySearchFile::readT(long filePointerLocation, long sizeOfData)
{
if(binary_search_file){
std::string data;
data.resize(sizeOfData);
binary_search_file.seekp(filePointerLocation);
binary_search_file.seekg(filePointerLocation);
binary_search_file.read(&data[0], sizeOfData);
return data;
}
};
读者来电
while (true){
std::unique_ptr<BinarySearchFile> data_file(new BinarySearchFile("classroom.dat"));
std::string attribute_value = data_file->read_data(0, 20);
}
作者来电
data_file->write_data("packard ");
writer总共写入50个字节
"packard 101 500 "
阅读器要读取第一个20 bytes,结果是“X packard X”,其中X 表示一些格式错误的数据字节。为什么以 x 字节数读回的数据损坏?
【问题讨论】:
-
文件是字节流。如果要写入文件,则需要一个字节流来写入该文件,该文件遵循您想要的任何文件格式。你有文件格式吗?您是否以该格式创建字节流?您希望这会变魔术。
-
你有文件格式吗?二进制!您是否以该格式创建字节流?我相信我这样做了,但显然是错误的。
-
如果有文件格式,第一个字节是什么意思?将特定信息放入您写入文件的数据的第一个字节的代码在哪里?
-
@Mushy Binary 不是一种文件格式。这只是一个粗略的指示,表明您使用的格式不限于可打印字符。
-
是的,我有一个使用 char 作为两字节类型的文件格式,这将使写入“packard” 20 字节。我使用
std::fstream::write()写入这20 个字节,然后使用std::fstream::read()读取这20 个字节。