diff --git a/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets b/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets index 610c1094f2232012805a85fa2e79617f263dd8a4..3312ef254b3b55d32d559006127ba5aee08ce094 100644 --- a/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets +++ b/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets @@ -1954,8 +1954,8 @@ export class AtomicFile { throw createBusinessError(UNKNOWN_ERR, UNKNOWN_MSG); } this.writeStream?.close(); - this.nativeFinishWrite(); this.writeStream = null; + this.nativeFinishWrite(); }; native nativeFailWrite(): void; @@ -1964,8 +1964,8 @@ export class AtomicFile { throw createBusinessError(UNKNOWN_ERR, UNKNOWN_MSG); } this.writeStream?.close(); - this.nativeFailWrite(); this.writeStream = null; + this.nativeFailWrite(); }; native delete(): void; diff --git a/interfaces/kits/js/src/mod_fs/class_atomicfile/fs_atomicfile.cpp b/interfaces/kits/js/src/mod_fs/class_atomicfile/fs_atomicfile.cpp index 2caa33889b4355e772b956cb41798fe94bbb0e53..a9d376abf3bf7e16697f357d4d0dadc888b10240 100644 --- a/interfaces/kits/js/src/mod_fs/class_atomicfile/fs_atomicfile.cpp +++ b/interfaces/kits/js/src/mod_fs/class_atomicfile/fs_atomicfile.cpp @@ -168,9 +168,10 @@ FsResult FsAtomicFile::StartWrite() FsResult FsAtomicFile::FinishWrite() { - if (std::rename(entity->newFileName.c_str(), entity->baseFileName.c_str()) != 0) { - HILOGE("rename failed"); - return FsResult::Error(errno); + auto result = std::rename(entity->newFileName.c_str(), entity->baseFileName.c_str()); + if (result != 0) { + HILOGE("Failed to rename file, ret:%{public}d", result); + return FsResult::Error(UNKNOWN_ERR, "Failed to rename file"); } std::string tmpNewFileName = entity->baseFileName; entity->newFileName = tmpNewFileName.append(TEMP_FILE_SUFFIX); @@ -182,7 +183,7 @@ FsResult FsAtomicFile::FailWrite() { if (!fs::remove(entity->newFileName)) { HILOGW("Failed to remove file"); - return FsResult::Error(errno); + return FsResult::Error(UNKNOWN_ERR, "Failed to remove file"); } std::string tmpNewFileName = entity->baseFileName; entity->newFileName = tmpNewFileName.append(TEMP_FILE_SUFFIX); diff --git a/utils/filemgmt_libfs/include/fs_error.h b/utils/filemgmt_libfs/include/fs_error.h index 94525eec342459861a8b37682b4714ccfad86a6f..d60d8d710b47430f7e11814a6d7dbc38c26112c5 100644 --- a/utils/filemgmt_libfs/include/fs_error.h +++ b/utils/filemgmt_libfs/include/fs_error.h @@ -158,7 +158,9 @@ enum ErrCodeSuffixOfDistributedFile { E_NETWORK_ERR, E_BATTERY_WARNING, E_EXCEED_MAX_LIMIT, - E_DATABASE_FAILED + E_INNER_ERROR, + E_OTHER_TASK_RUNNING, + E_VERSION_FILE_NO_EXIST, }; enum CommonErrCode { @@ -271,7 +273,8 @@ static inline std::unordered_map> errCodeTa { EBADFD, { FILEIO_SYS_CAP_TAG + E_BADFD, "File descriptor in bad state" } }, { ERESTART, { FILEIO_SYS_CAP_TAG + E_RESTART, "Interrupted system call should be restarted" } }, { EDQUOT, { FILEIO_SYS_CAP_TAG + E_DQUOT, "Quota exceeded" } }, - { UNKNOWN_ERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error" } }, + { UNKNOWN_ERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error. Possible causes: 1.Insufficient memory." + "2.Memory operation error. 3.Null pointer. 4.Failed to obtain expected resources." } }, { ENOLCK, { FILEIO_SYS_CAP_TAG + E_NOLCK, "No record locks available" } }, { ENETUNREACH, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, "Network is unreachable" } }, { ECONNECTIONFAIL, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, "Connection failed" } }, @@ -321,7 +324,8 @@ static inline std::unordered_map> errCodeTa { FILEIO_SYS_CAP_TAG + E_RESTART, { FILEIO_SYS_CAP_TAG + E_RESTART, "Interrupted system call should be restarted" } }, { FILEIO_SYS_CAP_TAG + E_DQUOT, { FILEIO_SYS_CAP_TAG + E_DQUOT, "Quota exceeded" } }, - { FILEIO_SYS_CAP_TAG + E_UKERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error" } }, + { FILEIO_SYS_CAP_TAG + E_UKERR, { FILEIO_SYS_CAP_TAG + E_UKERR, "Unknown error. Possible causes:" + "1.Insufficient memory. 2.Memory operation error. 3.Null pointer. 4.Failed to obtain expected resources." } }, { FILEIO_SYS_CAP_TAG + E_NOLCK, { FILEIO_SYS_CAP_TAG + E_NOLCK, "No record locks available" } }, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, { FILEIO_SYS_CAP_TAG + E_NETUNREACH, "Network is unreachable" } }, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, { FILEIO_SYS_CAP_TAG + E_CONNECTION_FAIL, "Connection failed" } }, @@ -351,7 +355,8 @@ static inline std::unordered_map> errCodeTa { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_TYPE, "File type is not allow in the directory" } }, { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY, { USER_FILE_MANAGER_SYS_CAP_TAG + E_FILE_KEY, "Member not exist" } }, { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT, { USER_FILE_MANAGER_SYS_CAP_TAG + E_INPUT, "Wrong input parameter" } }, - { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, "IPC error" } }, + { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, { STORAGE_SERVICE_SYS_CAP_TAG + E_IPCSS, + "IPC error. Possible causes: 1.IPC failed or timed out. 2.Failed to load the service" } }, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS, { STORAGE_SERVICE_SYS_CAP_TAG + E_NOTSUPPORTEDFS, "Not supported filesystem" } }, { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, { STORAGE_SERVICE_SYS_CAP_TAG + E_MOUNT, "Failed to mount" } }, @@ -407,13 +412,19 @@ static inline std::unordered_map> errCodeTa { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_BATTERY_WARNING, "Battery level warning" } }, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_EXCEED_MAX_LIMIT, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_EXCEED_MAX_LIMIT, "Exceed the maximum limit" } }, - { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_DATABASE_FAILED, - { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_DATABASE_FAILED, "Database operation failed" } }, + { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_INNER_ERROR, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + + E_INNER_ERROR, "Inner error. Possible causes: 1.Failed to access the database or execute the SQL statement." + "2.System error, such as a null pointer, insufficient memory or a JS engine exception." } }, + { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_OTHER_TASK_RUNNING, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + + E_OTHER_TASK_RUNNING, "The same task is already in progress" } }, + { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + E_VERSION_FILE_NO_EXIST, { DISTRIBUTEDFILE_SERVICE_SYS_CAP_TAG + + E_VERSION_FILE_NO_EXIST, "The version file specified to replace the original file does not exist." } }, }; class FsError { public: FsError(int errCode); + FsError(int errCode, std::string errMsg); int GetErrNo() const; const std::string &GetErrMsg() const; ~FsError() = default; diff --git a/utils/filemgmt_libfs/include/fs_result.h b/utils/filemgmt_libfs/include/fs_result.h index 0aaab49eabaa8b99b1bc64ecee284209d7bf2b2b..6043ac2ad3187e5e0049c8e6bd25bca837b52188 100644 --- a/utils/filemgmt_libfs/include/fs_result.h +++ b/utils/filemgmt_libfs/include/fs_result.h @@ -56,6 +56,11 @@ public: return FsResult(FsError(code), std::nullopt); } + static FsResult Error(const int32_t code, const std::string msg) + { + return FsResult(FsError(code, msg), std::nullopt); + } + bool IsSuccess() const { return !error_; diff --git a/utils/filemgmt_libfs/src/fs_error.cpp b/utils/filemgmt_libfs/src/fs_error.cpp index 3636a7d5f966a4633f5f57b73d7d705af0196de5..51931688b5e8175b2bd39c0e972731a78959b78a 100644 --- a/utils/filemgmt_libfs/src/fs_error.cpp +++ b/utils/filemgmt_libfs/src/fs_error.cpp @@ -44,6 +44,18 @@ FsError::FsError(int errCode) } } +FsError(int errCode, std::string errMsg) +{ + int genericCode = ConvertUVCode2ErrCode(errCode); + auto it = errCodeTable.find(genericCode); + if (it != errCodeTable.end()) { + errno_ = it->second.first; + } else { + errno_ = errCodeTable.at(UNKNOWN_ERR).first; + } + errMsg_ = errMsg; +} + int FsError::GetErrNo() const { return errno_;