! \brief Check can load from binary file */
| 1206 | |
| 1207 | /*! \brief Check can load from binary file */ |
| 1208 | std::string DatasetLoader::CheckCanLoadFromBin(const char* filename) { |
| 1209 | std::string bin_filename(filename); |
| 1210 | bin_filename.append(".bin"); |
| 1211 | |
| 1212 | auto reader = VirtualFileReader::Make(bin_filename.c_str()); |
| 1213 | |
| 1214 | if (!reader->Init()) { |
| 1215 | bin_filename = std::string(filename); |
| 1216 | reader = VirtualFileReader::Make(bin_filename.c_str()); |
| 1217 | if (!reader->Init()) { |
| 1218 | Log::Fatal("Cannot open data file %s", bin_filename.c_str()); |
| 1219 | } |
| 1220 | } |
| 1221 | |
| 1222 | size_t buffer_size = 256; |
| 1223 | auto buffer = std::vector<char>(buffer_size); |
| 1224 | // read size of token |
| 1225 | size_t size_of_token = std::strlen(Dataset::binary_file_token); |
| 1226 | size_t read_cnt = reader->Read(buffer.data(), size_of_token); |
| 1227 | if (read_cnt == size_of_token |
| 1228 | && std::string(buffer.data()) == std::string(Dataset::binary_file_token)) { |
| 1229 | return bin_filename; |
| 1230 | } else { |
| 1231 | return std::string(); |
| 1232 | } |
| 1233 | } |
| 1234 | |
| 1235 | |
| 1236 |