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;
    }
}

ただし、このファイルは、読み取り可能なテキスト データを含む標準のテキスト ファイルです。文字列の文字や文字そのものをバイナリ形式(2byte char)で書きたい。RandomAccessFilestd::fstreamと同様の操作を試みています。

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

質問: ファイルを正しく作成しましたか?バイナリ データが書き込まれていないのはなぜですか?

4

1 に答える 1

0

ファイルを正しく作成しました。ファイルにはバイナリとテキストの 2 種類があると誤解しています。operator<<代わりに、 text likeと binary likeの 2 種類の I/O 操作がありますwrite

2 バイト文字が表示されない理由は、std::string1 バイト文字しかないためです。2 バイト文字が必要な場合は、std::wstring.

于 2013-04-15T20:27:31.460 に答える