Я подозреваю, что я даже не создание и открытие файла для двоичных входов/выходов с помощью std::fstream
станд :: fstream :: написать && станд :: fstream :: putc станд :: ИОС :: двоичная
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;
}
try{
if(binary_search_file.fail()){
throw CustomException("Unspecified table data file error");
}
}
catch (CustomException &custom_exception){ // Using custom exception class
std::cout << custom_exception.what() << std::endl;
return;
}
}
Я считаю, что это верно, потому что я пишу данные
void BinarySearchFile::writeT(std::string attribute){
try{
if(binary_search_file){
binary_search_file.write(attribute.c_str(), attribute.length());
}else if(binary_search_file.fail()){
throw CustomException("Attempt to write attribute error");
}
}
catch(CustomException &custom_exception){ // Using custom exception class
std::cout << custom_exception.what() << std::endl;
return;
}
}
Но файл является стандартным текстовым файлом со считываемыми текстовыми данными. Я хочу написать символы строки или самих символов в двоичном формате (2 байта char). Я пытаюсь использовать std::fstream
, аналогичный RandomAccessFile.
_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __
Вопрос: правильно ли я создал файл и почему я не вижу записи двоичных данных?
Я считаю, что вам нужно использовать 'binary_search_file.open (data_file_name.c_str(), std :: ios :: binary)'. Обратите внимание на 'c_str()'. –
@Thomas: (a) Visual Studio обеспечивает перегрузку для поддержки кода OP; (b) также C++ 11; (c) если это не так, это вызовет ошибку компиляции, и кажется очевидным, что OP не испытывает ошибку компиляции. –