0

我怀疑我什至没有使用创建和打开二进制 I/O 文件std::fstream

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字节字符)编写字符串的字符或字符本身。我正在尝试操作std::fstream类似于RandomAccessFile

_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ __ _ __ _ __ _ _ __ _ __

问题是:我是否正确创建了文件,为什么我没有看到写入的二进制数据?

4

1 回答 1

0

您确实正确创建了文件。你有一个误解,有两种文件,二进制文件和文本文件。取而代之的是两种 I/O 操作,text likeoperator<<和 binary like write

您没有看到两个字节字符的原因是它std::string只有一个字节字符。如果您想要两个字节字符,请使用std::wstring.

于 2013-04-15T20:27:31.460 回答