// sherpa-onnx/csrc/file-utils.cc // // Copyright (c) 2022-2023 Xiaomi Corporation #include "sherpa-onnx/csrc/file-utils.h" #include #include #include #include #include "sherpa-onnx/csrc/macros.h" namespace sherpa_onnx { bool FileExists(const std::string &filename) { return std::ifstream(filename).good(); } void AssertFileExists(const std::string &filename) { if (!FileExists(filename)) { SHERPA_ONNX_LOGE("filename '%s' does not exist", filename.c_str()); exit(-1); } } std::vector ReadFile(const std::string &filename) { std::ifstream input(filename, std::ios::binary); std::vector buffer(std::istreambuf_iterator(input), {}); return buffer; } #if __ANDROID_API__ >= 9 std::vector ReadFile(AAssetManager *mgr, const std::string &filename) { AAsset *asset = AAssetManager_open(mgr, filename.c_str(), AASSET_MODE_BUFFER); if (!asset) { __android_log_print(ANDROID_LOG_FATAL, "sherpa-onnx", "Read binary file: Load '%s' failed", filename.c_str()); exit(-1); } auto p = reinterpret_cast(AAsset_getBuffer(asset)); size_t asset_length = AAsset_getLength(asset); std::vector buffer(p, p + asset_length); AAsset_close(asset); return buffer; } #endif #if __OHOS__ std::vector ReadFile(NativeResourceManager *mgr, const std::string &filename) { std::unique_ptr fp( OH_ResourceManager_OpenRawFile(mgr, filename.c_str()), OH_ResourceManager_CloseRawFile); if (!fp) { std::ostringstream os; os << "Read file '" << filename << "' failed."; SHERPA_ONNX_LOGE("%s", os.str().c_str()); return {}; } auto len = static_cast(OH_ResourceManager_GetRawFileSize(fp.get())); std::vector buffer(len); int32_t n = OH_ResourceManager_ReadRawFile(fp.get(), buffer.data(), len); if (n != len) { std::ostringstream os; os << "Read file '" << filename << "' failed. Number of bytes read: " << n << ". Expected bytes to read: " << len; SHERPA_ONNX_LOGE("%s", os.str().c_str()); return {}; } return buffer; } #endif } // namespace sherpa_onnx