diff --git a/interfaces/kits/js/src/mod_fs/class_atomicfile/atomicfile_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_atomicfile/atomicfile_n_exporter.cpp index 456a2f8f057faa9e4608d12622fe65bcff148b84..aa8902e50bf5e8d9879ff63d1495082adf518e8c 100644 --- a/interfaces/kits/js/src/mod_fs/class_atomicfile/atomicfile_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_atomicfile/atomicfile_n_exporter.cpp @@ -388,7 +388,18 @@ napi_value AtomicFileNExporter::FinishWrite(napi_env env, napi_callback_info inf CallFunctionByName(env, writeStream, "closeSync"); - std::rename(rafEntity->newFileName.c_str(), rafEntity->baseFileName.c_str()); + int32_t result = std::rename(rafEntity->newFileName.c_str(), rafEntity->baseFileName.c_str()); + if (result != 0) { + HILOGE("Failed to rename file, ret:%{public}d", result); + status = napi_delete_reference(env, rafEntity->writeStreamObj); + if (status != napi_ok) { + HILOGE("Failed to delete reference"); + NError(UNKROWN_ERR).ThrowErr(env, "Failed to delete reference"); + return nullptr; + } + NError(UNKROWN_ERR).ThrowErr(env, "Failed to rename file"); + return nullptr; + } std::string tmpNewFileName = rafEntity->baseFileName; rafEntity->newFileName = tmpNewFileName.append(TEMP_FILE_SUFFIX); status = napi_delete_reference(env, rafEntity->writeStreamObj); @@ -424,6 +435,14 @@ napi_value AtomicFileNExporter::FailWrite(napi_env env, napi_callback_info info) if (!fs::remove(rafEntity->newFileName)) { HILOGW("Failed to remove file"); + status = napi_delete_reference(env, rafEntity->writeStreamObj); + if (status != napi_ok) { + HILOGE("Failed to delete reference"); + NError(UNKROWN_ERR).ThrowErr(env, "Failed to delete reference"); + return nullptr; + } + NError(UNKROWN_ERR).ThrowErr(env, "Failed to remove file"); + return nullptr; } std::string tmpNewFileName = rafEntity->baseFileName; rafEntity->newFileName = tmpNewFileName.append(TEMP_FILE_SUFFIX);