From baf2f1d8e642ec5abb1928c8909c2ee3d1af0bee Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Thu, 21 Jul 2022 11:19:21 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0isFileExist=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangjianqiang --- .../include/file_access_ext_ability.h | 1 + .../include/file_access_ext_proxy.h | 1 + .../include/file_access_ext_stub.h | 1 + .../include/file_access_ext_stub_impl.h | 1 + .../file_access/include/file_access_helper.h | 1 + .../include/ifile_access_ext_base.h | 4 +- .../include/js_file_access_ext_ability.h | 2 + .../src/file_access_ext_ability.cpp | 5 + .../file_access/src/file_access_ext_proxy.cpp | 30 +++++ .../file_access/src/file_access_ext_stub.cpp | 28 ++++ .../src/file_access_ext_stub_impl.cpp | 15 +++ .../file_access/src/file_access_helper.cpp | 15 +++ .../src/js_file_access_ext_ability.cpp | 27 ++++ .../file_access_ext_ability.js | 4 + .../napi_fileaccess_helper.cpp | 126 ++++++++++++++---- .../napi_fileaccess_helper.h | 1 + .../FileExtensionAbility.ts | 13 ++ 17 files changed, 246 insertions(+), 29 deletions(-) diff --git a/frameworks/innerkits/file_access/include/file_access_ext_ability.h b/frameworks/innerkits/file_access/include/file_access_ext_ability.h index 62bb646c..36697e06 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_ability.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_ability.h @@ -48,6 +48,7 @@ public: virtual std::vector ListFile(const Uri &sourceFile); virtual std::vector GetRoots(); + virtual bool IsFileExist(const Uri &uri); static void SetCreator(const CreatorFunc& creator); private: static CreatorFunc creator_; diff --git a/frameworks/innerkits/file_access/include/file_access_ext_proxy.h b/frameworks/innerkits/file_access/include/file_access_ext_proxy.h index 0b1a7b0a..ff318240 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_proxy.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_proxy.h @@ -45,6 +45,7 @@ public: virtual std::vector ListFile(const Uri &sourceFile) override; virtual std::vector GetRoots() override; + virtual bool IsFileExist(const Uri &uri) override; private: static inline BrokerDelegator delegator_; }; diff --git a/frameworks/innerkits/file_access/include/file_access_ext_stub.h b/frameworks/innerkits/file_access/include/file_access_ext_stub.h index 5766594d..a9681abf 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_stub.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_stub.h @@ -43,6 +43,7 @@ private: ErrCode CmdRename(MessageParcel &data, MessageParcel &reply); ErrCode CmdListFile(MessageParcel &data, MessageParcel &reply); ErrCode CmdGetRoots(MessageParcel &data, MessageParcel &reply); + ErrCode CmdIsFileExist(MessageParcel &data, MessageParcel &reply); bool CheckCallingPermission(const std::string &permission); using RequestFuncType = int (FileAccessExtStub::*)(MessageParcel &data, MessageParcel &reply); std::map stubFuncMap_; diff --git a/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h b/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h index 63ee7b49..268d5bc1 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h @@ -42,6 +42,7 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; std::vector ListFile(const Uri &sourceFileUri) override; std::vector GetRoots() override; + bool IsFileExist(const Uri &uri) override; private: std::shared_ptr GetOwner(); diff --git a/frameworks/innerkits/file_access/include/file_access_helper.h b/frameworks/innerkits/file_access/include/file_access_helper.h index 3acf6103..015b7022 100644 --- a/frameworks/innerkits/file_access/include/file_access_helper.h +++ b/frameworks/innerkits/file_access/include/file_access_helper.h @@ -45,6 +45,7 @@ public: bool GetProxy(); bool Release(); + bool IsFileExist(Uri &uri); int OpenFile(Uri &uri, int flags); int CreateFile(Uri &parent, const std::string &displayName, Uri &newFile); int Mkdir(Uri &parent, const std::string &displayName, Uri &newDir); diff --git a/frameworks/innerkits/file_access/include/ifile_access_ext_base.h b/frameworks/innerkits/file_access/include/ifile_access_ext_base.h index 554d5bb9..7b0083f6 100644 --- a/frameworks/innerkits/file_access/include/ifile_access_ext_base.h +++ b/frameworks/innerkits/file_access/include/ifile_access_ext_base.h @@ -38,7 +38,8 @@ public: CMD_MOVE, CMD_RENAME, CMD_LIST_FILE, - CMD_GET_ROOTS + CMD_GET_ROOTS, + CMD_IS_FILE_EXIST }; virtual int OpenFile(const Uri &uri, const int flags) = 0; @@ -50,6 +51,7 @@ public: virtual std::vector ListFile(const Uri &sourceFile) = 0; virtual std::vector GetRoots() = 0; + virtual bool IsFileExist(const Uri &uri) = 0; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h b/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h index 1ba07295..12683c6e 100644 --- a/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h +++ b/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h @@ -64,6 +64,8 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; std::vector ListFile(const Uri &sourceFile) override; std::vector GetRoots() override; + bool IsFileExist(const Uri &uri) override; + private: NativeValue* AsnycCallObjectMethod(const char *name, NativeValue * const *argv = nullptr, size_t argc = 0); NativeValue* CallObjectMethod(const char *name, NativeValue * const *argv = nullptr, size_t argc = 0); diff --git a/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp b/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp index 3aee053a..bca70719 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp @@ -101,5 +101,10 @@ std::vector FileAccessExtAbility::GetRoots() std::vector vec; return vec; } + +bool FileAccessExtAbility::IsFileExist(const Uri &uri) +{ + return true; +} } // namespace FileAccessFwk } // namespace OHOS \ No newline at end of file diff --git a/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp b/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp index c230661f..a53eb486 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp @@ -398,5 +398,35 @@ std::vector FileAccessExtProxy::GetRoots() FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return vec; } + +bool FileAccessExtProxy::IsFileExist(const Uri &uri) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); + MessageParcel data; + if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { + HILOG_ERROR("WriteInterfaceToken failed"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_IPC_ERROR; + } + + if (!data.WriteParcelable(&uri)) { + HILOG_ERROR("fail to WriteParcelable uri"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_IPC_ERROR; + } + + MessageParcel reply; + MessageOption option; + int32_t err = Remote()->SendRequest(CMD_IS_FILE_EXIST, data, reply, option); + if (err != NO_ERROR) { + HILOG_ERROR("fail to SendRequest. err: %{public}d", err); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return false; + } + + bool ret = reply.ReadBool(); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; +} } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp b/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp index dcf26327..8c9e9f5f 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp @@ -48,6 +48,7 @@ FileAccessExtStub::FileAccessExtStub() stubFuncMap_[CMD_RENAME] = &FileAccessExtStub::CmdRename; stubFuncMap_[CMD_LIST_FILE] = &FileAccessExtStub::CmdListFile; stubFuncMap_[CMD_GET_ROOTS] = &FileAccessExtStub::CmdGetRoots; + stubFuncMap_[CMD_IS_FILE_EXIST] = &FileAccessExtStub::CmdIsFileExist; } FileAccessExtStub::~FileAccessExtStub() @@ -384,6 +385,33 @@ ErrCode FileAccessExtStub::CmdGetRoots(MessageParcel &data, MessageParcel &reply return ERR_OK; } +ErrCode FileAccessExtStub::CmdIsFileExist(MessageParcel &data, MessageParcel &reply) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdIsFileExist"); + std::shared_ptr uri(data.ReadParcelable()); + if (uri == nullptr) { + HILOG_ERROR("IsFIleExist uri is nullptr"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return false; + } + + bool ret = IsFileExist(*uri); + if (ret == false) { + HILOG_ERROR("IsFIleExist fail"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + + if (!reply.WriteBool(ret)) { + HILOG_ERROR("IsFIleExist fail "); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return false; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return true; +} + bool FileAccessExtStub::CheckCallingPermission(const std::string &permission) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdGetRoots"); diff --git a/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp b/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp index cf383453..921b63f4 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp @@ -145,5 +145,20 @@ std::vector FileAccessExtStubImpl::GetRoots() FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return vec; } + +bool FileAccessExtStubImpl::IsFileExist(const Uri &uri) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); + bool ret = false; + if (extension_ == nullptr) { + HILOG_ERROR("IsFileExist get extension failed."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + + ret = extension_->IsFileExist(uri); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; +} } // namespace FileAccessFwk } // namespace OHOS \ No newline at end of file diff --git a/frameworks/innerkits/file_access/src/file_access_helper.cpp b/frameworks/innerkits/file_access/src/file_access_helper.cpp index 958a1fd1..f294928c 100644 --- a/frameworks/innerkits/file_access/src/file_access_helper.cpp +++ b/frameworks/innerkits/file_access/src/file_access_helper.cpp @@ -272,6 +272,21 @@ std::vector FileAccessHelper::GetRoots() return results; } +bool FileAccessHelper::IsFileExist(Uri &uri) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "OpenFile"); + bool ret = false; + if (!GetProxy()) { + HILOG_ERROR("failed with invalid fileAccessExtProxy_"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return false; + } + + ret = fileAccessExtProxy_->IsFileExist(uri); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; +} + void FileAccessDeathRecipient::OnRemoteDied(const wptr &remote) { if (handler_) { diff --git a/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp b/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp index 4dc21c9b..bff37573 100644 --- a/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp +++ b/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp @@ -504,5 +504,32 @@ std::vector JsFileAccessExtAbility::GetRoots() FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return vec; } + +bool JsFileAccessExtAbility::IsFileExist(const Uri &uri) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); + HandleScope handleScope(jsRuntime_); + napi_env env = reinterpret_cast(&jsRuntime_.GetNativeEngine()); + + napi_value napiUri = nullptr; + napi_create_string_utf8(env, uri.ToString().c_str(), NAPI_AUTO_LENGTH, &napiUri); + + NativeValue* nativeUri = reinterpret_cast(napiUri); + NativeValue* argv[] = {nativeUri}; + NativeValue* nativeResult = AsnycCallObjectMethod("isFileExist", argv, ARGC_ONE); + bool ret = false; + if (nativeResult == nullptr) { + HILOG_ERROR("call isFileExist with return null."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + + if (OHOS::AppExecFwk::UnwrapBoolFromJS2(env, reinterpret_cast(nativeResult), ret)) { + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; +} } // namespace FileAccessFwk } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/napi/file_access_ext_ability/file_access_ext_ability.js b/interfaces/kits/napi/file_access_ext_ability/file_access_ext_ability.js index 97f0eb6a..4728e023 100644 --- a/interfaces/kits/napi/file_access_ext_ability/file_access_ext_ability.js +++ b/interfaces/kits/napi/file_access_ext_ability/file_access_ext_ability.js @@ -50,6 +50,10 @@ class FileAccessExtensionAbility { let roots = []; return roots; } + + isFileExist() { + return true; + } } export default FileAccessExtensionAbility \ No newline at end of file diff --git a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp index c8edcf9b..de322b44 100644 --- a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp @@ -155,6 +155,7 @@ napi_value FileAccessHelperInit(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("rename", NAPI_Rename), DECLARE_NAPI_FUNCTION("listFile", NAPI_ListFile), DECLARE_NAPI_FUNCTION("getRoots", NAPI_GetRoots), + DECLARE_NAPI_FUNCTION("isFileExist", NAPI_IsFileExist), }; napi_value cons = nullptr; NAPI_CALL(env, @@ -240,11 +241,14 @@ napi_value NAPI_OpenFile(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::THIRD]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::THIRD]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } napi_value NAPI_CreateFile(napi_env env, napi_callback_info info) @@ -296,11 +300,14 @@ napi_value NAPI_CreateFile(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::THIRD]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::THIRD]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } napi_value NAPI_Mkdir(napi_env env, napi_callback_info info) @@ -352,11 +359,14 @@ napi_value NAPI_Mkdir(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::THIRD]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::THIRD]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } napi_value NAPI_Delete(napi_env env, napi_callback_info info) @@ -398,11 +408,14 @@ napi_value NAPI_Delete(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::SECOND]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::SECOND]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } napi_value NAPI_Move(napi_env env, napi_callback_info info) @@ -455,11 +468,14 @@ napi_value NAPI_Move(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::THIRD]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::THIRD]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } napi_value NAPI_Rename(napi_env env, napi_callback_info info) @@ -557,11 +573,14 @@ napi_value NAPI_ListFile(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::SECOND]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::SECOND]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } napi_value NAPI_GetRoots(napi_env env, napi_callback_info info) @@ -593,11 +612,62 @@ napi_value NAPI_GetRoots(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ZERO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; - } else { - NVal cb(env, funcArg[NARG_POS::FIRST]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - return NVal::CreateUndefined(env).val_; + + NVal cb(env, funcArg[NARG_POS::FIRST]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; +} + +napi_value NAPI_IsFileExist(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::TWO)) { + NError(EINVAL).ThrowErr(env, "Number of arguments unmatched"); + return nullptr; + } + + bool succ = false; + std::unique_ptr uri; + std::tie(succ, uri, std::ignore) = NVal(env, funcArg[NARG_POS::FIRST]).ToUTF8String(); + if (!succ) { + NError(EINVAL).ThrowErr(env, "Invalid uri"); + return nullptr; + } + + FileAccessHelper *fileAccessHelper = GetFileAccessHelper(env, funcArg.GetThisVar()); + if (fileAccessHelper == nullptr) { + return nullptr; + } + + auto result = std::make_shared(); + string uriString(uri.get()); + auto cbExec = [uriString, result, fileAccessHelper]() -> NError { + OHOS::Uri uri(uriString); + *result = fileAccessHelper->IsFileExist(uri); + return NError(ERRNO_NOERR); + }; + auto cbComplete = [result](napi_env env, NError err) -> NVal { + if (err) { + return { env, err.GetNapiErr(env) }; + } + return { NVal::CreateBool(env, *result) }; + }; + + std::string procedureName = "isFileExist"; + NVal thisVar(env, funcArg.GetThisVar()); + if (funcArg.GetArgc() == NARG_CNT::ONE) { + return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } + NVal cb(env, funcArg[NARG_POS::SECOND]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env, "not function type"); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.h b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.h index 3436517d..9f04a077 100644 --- a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.h +++ b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.h @@ -32,6 +32,7 @@ namespace FileAccessFwk { napi_value NAPI_Rename(napi_env env, napi_callback_info info); napi_value NAPI_ListFile(napi_env env, napi_callback_info info); napi_value NAPI_GetRoots(napi_env env, napi_callback_info info); + napi_value NAPI_IsFileExist(napi_env env, napi_callback_info info); } } // namespace FileAccessFwk #endif // NAPI_FILEACCESS_HELPER_H \ No newline at end of file diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index a1dfd5e2..5abf61c5 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -309,6 +309,19 @@ export default class FileExtAbility extends Extension { } } + isFileExist(sourceFileUri) { + if (!this.checkUri(sourceFileUri)) { + return false; + } + try { + let path = this.getPath(sourceFileUri); + fileio.accessSync(path); + } catch (e) { + return false; + } + return true; + } + listFile(sourceFileUri) { if (!this.checkUri(sourceFileUri)) { return []; -- Gitee From 44d491b7a6f8dd9de814da7389ca7bb2d1353ca2 Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Thu, 21 Jul 2022 14:27:47 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9codecheck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangjianqiang --- .../napi_fileaccess_helper.cpp | 77 +++++++------------ 1 file changed, 28 insertions(+), 49 deletions(-) diff --git a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp index de322b44..07e1c07e 100644 --- a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp @@ -241,14 +241,11 @@ napi_value NAPI_OpenFile(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::THIRD]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::THIRD]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_CreateFile(napi_env env, napi_callback_info info) @@ -300,14 +297,11 @@ napi_value NAPI_CreateFile(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::THIRD]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::THIRD]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_Mkdir(napi_env env, napi_callback_info info) @@ -359,14 +353,11 @@ napi_value NAPI_Mkdir(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::THIRD]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::THIRD]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_Delete(napi_env env, napi_callback_info info) @@ -408,14 +399,11 @@ napi_value NAPI_Delete(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::SECOND]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::SECOND]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_Move(napi_env env, napi_callback_info info) @@ -468,14 +456,11 @@ napi_value NAPI_Move(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::THIRD]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::THIRD]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_Rename(napi_env env, napi_callback_info info) @@ -573,14 +558,11 @@ napi_value NAPI_ListFile(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::SECOND]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::SECOND]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_GetRoots(napi_env env, napi_callback_info info) @@ -612,14 +594,11 @@ napi_value NAPI_GetRoots(napi_env env, napi_callback_info info) NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ZERO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } else { + NVal cb(env, funcArg[NARG_POS::FIRST]); + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } - - NVal cb(env, funcArg[NARG_POS::FIRST]); - if (!cb.TypeIs(napi_function)) { - NError(EINVAL).ThrowErr(env, "not function type"); - return nullptr; - } - return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; + return NVal::CreateUndefined(env).val_; } napi_value NAPI_IsFileExist(napi_env env, napi_callback_info info) -- Gitee From 80d43bfd305dbfbe71c86184068a698aa8da7047 Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Thu, 21 Jul 2022 17:05:18 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E6=84=8F=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangjianqiang --- .../innerkits/file_access/src/file_access_ext_proxy.cpp | 4 ++-- frameworks/innerkits/file_access/src/file_access_ext_stub.cpp | 4 ++-- frameworks/innerkits/file_access/src/file_access_helper.cpp | 2 +- .../src/main/ets/FileExtensionAbility/FileExtensionAbility.ts | 3 +++ 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp b/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp index a53eb486..43c1d909 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp @@ -406,13 +406,13 @@ bool FileAccessExtProxy::IsFileExist(const Uri &uri) if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { HILOG_ERROR("WriteInterfaceToken failed"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return ERR_IPC_ERROR; + return false; } if (!data.WriteParcelable(&uri)) { HILOG_ERROR("fail to WriteParcelable uri"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return ERR_IPC_ERROR; + return false; } MessageParcel reply; diff --git a/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp b/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp index 8c9e9f5f..6e484829 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp @@ -397,13 +397,13 @@ ErrCode FileAccessExtStub::CmdIsFileExist(MessageParcel &data, MessageParcel &re bool ret = IsFileExist(*uri); if (ret == false) { - HILOG_ERROR("IsFIleExist fail"); + HILOG_ERROR("Exec IsFileExit failed"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } if (!reply.WriteBool(ret)) { - HILOG_ERROR("IsFIleExist fail "); + HILOG_ERROR("Parcel IsFileExist result failed"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return false; } diff --git a/frameworks/innerkits/file_access/src/file_access_helper.cpp b/frameworks/innerkits/file_access/src/file_access_helper.cpp index f294928c..f5560061 100644 --- a/frameworks/innerkits/file_access/src/file_access_helper.cpp +++ b/frameworks/innerkits/file_access/src/file_access_helper.cpp @@ -279,7 +279,7 @@ bool FileAccessHelper::IsFileExist(Uri &uri) if (!GetProxy()) { HILOG_ERROR("failed with invalid fileAccessExtProxy_"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return false; + return ret; } ret = fileAccessExtProxy_->IsFileExist(uri); diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 5abf61c5..c58adfb0 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -163,6 +163,9 @@ export default class FileExtAbility extends Extension { } try { let newFileUri = this.genNewFileUri(parentUri, displayName); + if (this.isFileExist(newFileUri)) { + return ''; + } let path = this.getPath(newFileUri); fileio.openSync(path, CREATE_FILE_FLAGS, DEFAULT_MODE); return newFileUri; -- Gitee From edd3cfb2e4b9c660d63bab52054ce47aad0f2b92 Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Fri, 22 Jul 2022 09:08:32 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=91=E8=A7=86?= =?UTF-8?q?=E6=84=8F=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangjianqiang --- frameworks/innerkits/file_access/src/file_access_helper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/innerkits/file_access/src/file_access_helper.cpp b/frameworks/innerkits/file_access/src/file_access_helper.cpp index f5560061..8420e8ed 100644 --- a/frameworks/innerkits/file_access/src/file_access_helper.cpp +++ b/frameworks/innerkits/file_access/src/file_access_helper.cpp @@ -274,7 +274,7 @@ std::vector FileAccessHelper::GetRoots() bool FileAccessHelper::IsFileExist(Uri &uri) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "OpenFile"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); bool ret = false; if (!GetProxy()) { HILOG_ERROR("failed with invalid fileAccessExtProxy_"); -- Gitee From 6c7547d40e3d5001bbd85eda7f2041af48dfcaf7 Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Tue, 26 Jul 2022 09:50:01 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AD=98=E5=9C=A8=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangjianqiang --- .../include/file_access_ext_ability.h | 2 +- .../include/file_access_ext_proxy.h | 2 +- .../include/file_access_ext_stub_impl.h | 2 +- .../file_access/include/file_access_helper.h | 2 +- .../include/ifile_access_ext_base.h | 2 +- .../include/js_file_access_ext_ability.h | 2 +- .../src/file_access_ext_ability.cpp | 4 ++-- .../file_access/src/file_access_ext_proxy.cpp | 23 +++++++++++++++---- .../file_access/src/file_access_ext_stub.cpp | 23 ++++++++++++------- .../src/file_access_ext_stub_impl.cpp | 6 ++--- .../file_access/src/file_access_helper.cpp | 7 +++--- .../src/js_file_access_ext_ability.cpp | 11 +++++---- .../napi_fileaccess_helper.cpp | 8 ++++--- 13 files changed, 60 insertions(+), 34 deletions(-) diff --git a/frameworks/innerkits/file_access/include/file_access_ext_ability.h b/frameworks/innerkits/file_access/include/file_access_ext_ability.h index 36697e06..1156de8c 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_ability.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_ability.h @@ -48,7 +48,7 @@ public: virtual std::vector ListFile(const Uri &sourceFile); virtual std::vector GetRoots(); - virtual bool IsFileExist(const Uri &uri); + virtual int IsFileExist(const Uri &uri, bool &isExist); static void SetCreator(const CreatorFunc& creator); private: static CreatorFunc creator_; diff --git a/frameworks/innerkits/file_access/include/file_access_ext_proxy.h b/frameworks/innerkits/file_access/include/file_access_ext_proxy.h index ff318240..28c11f44 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_proxy.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_proxy.h @@ -45,7 +45,7 @@ public: virtual std::vector ListFile(const Uri &sourceFile) override; virtual std::vector GetRoots() override; - virtual bool IsFileExist(const Uri &uri) override; + virtual int IsFileExist(const Uri &uri, bool &isExist) override; private: static inline BrokerDelegator delegator_; }; diff --git a/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h b/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h index 268d5bc1..7cfe65ae 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_stub_impl.h @@ -42,7 +42,7 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; std::vector ListFile(const Uri &sourceFileUri) override; std::vector GetRoots() override; - bool IsFileExist(const Uri &uri) override; + int IsFileExist(const Uri &uri, bool &isExist) override; private: std::shared_ptr GetOwner(); diff --git a/frameworks/innerkits/file_access/include/file_access_helper.h b/frameworks/innerkits/file_access/include/file_access_helper.h index 015b7022..7d42cc94 100644 --- a/frameworks/innerkits/file_access/include/file_access_helper.h +++ b/frameworks/innerkits/file_access/include/file_access_helper.h @@ -45,7 +45,7 @@ public: bool GetProxy(); bool Release(); - bool IsFileExist(Uri &uri); + int IsFileExist(Uri &uri, bool &isExist); int OpenFile(Uri &uri, int flags); int CreateFile(Uri &parent, const std::string &displayName, Uri &newFile); int Mkdir(Uri &parent, const std::string &displayName, Uri &newDir); diff --git a/frameworks/innerkits/file_access/include/ifile_access_ext_base.h b/frameworks/innerkits/file_access/include/ifile_access_ext_base.h index 7b0083f6..1d540557 100644 --- a/frameworks/innerkits/file_access/include/ifile_access_ext_base.h +++ b/frameworks/innerkits/file_access/include/ifile_access_ext_base.h @@ -51,7 +51,7 @@ public: virtual std::vector ListFile(const Uri &sourceFile) = 0; virtual std::vector GetRoots() = 0; - virtual bool IsFileExist(const Uri &uri) = 0; + virtual int IsFileExist(const Uri &uri, bool &isExist) = 0; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h b/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h index 12683c6e..62d89212 100644 --- a/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h +++ b/frameworks/innerkits/file_access/include/js_file_access_ext_ability.h @@ -64,7 +64,7 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; std::vector ListFile(const Uri &sourceFile) override; std::vector GetRoots() override; - bool IsFileExist(const Uri &uri) override; + int IsFileExist(const Uri &uri, bool &isExist) override; private: NativeValue* AsnycCallObjectMethod(const char *name, NativeValue * const *argv = nullptr, size_t argc = 0); diff --git a/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp b/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp index bca70719..8792e048 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_ability.cpp @@ -102,9 +102,9 @@ std::vector FileAccessExtAbility::GetRoots() return vec; } -bool FileAccessExtAbility::IsFileExist(const Uri &uri) +int FileAccessExtAbility::IsFileExist(const Uri &uri, bool &isExist) { - return true; + return ERR_OK; } } // namespace FileAccessFwk } // namespace OHOS \ No newline at end of file diff --git a/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp b/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp index 43c1d909..9610d999 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_proxy.cpp @@ -399,20 +399,26 @@ std::vector FileAccessExtProxy::GetRoots() return vec; } -bool FileAccessExtProxy::IsFileExist(const Uri &uri) +int FileAccessExtProxy::IsFileExist(const Uri &uri, bool &isExist) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); MessageParcel data; if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { HILOG_ERROR("WriteInterfaceToken failed"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return false; + return ERR_IPC_ERROR; } if (!data.WriteParcelable(&uri)) { HILOG_ERROR("fail to WriteParcelable uri"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return false; + return ERR_IPC_ERROR; + } + + if (!data.WriteBool(isExist)) { + HILOG_ERROR("fail to WriteBool isExist"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_IPC_ERROR; } MessageParcel reply; @@ -421,10 +427,17 @@ bool FileAccessExtProxy::IsFileExist(const Uri &uri) if (err != NO_ERROR) { HILOG_ERROR("fail to SendRequest. err: %{public}d", err); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return false; + return ERR_IPC_ERROR; + } + + int ret = reply.ReadInt32(); + if (ret < ERR_OK) { + HILOG_ERROR("fail to ReadInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; } - bool ret = reply.ReadBool(); + isExist = reply.ReadBool(); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp b/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp index 6e484829..c0d94cd2 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_stub.cpp @@ -392,24 +392,31 @@ ErrCode FileAccessExtStub::CmdIsFileExist(MessageParcel &data, MessageParcel &re if (uri == nullptr) { HILOG_ERROR("IsFIleExist uri is nullptr"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return false; + return ERR_INVALID_URI; } - bool ret = IsFileExist(*uri); - if (ret == false) { - HILOG_ERROR("Exec IsFileExit failed"); + bool isExist = data.ReadBool(); + int ret = IsFileExist(*uri, isExist); + if (ret < 0) { + HILOG_ERROR("parameter IsFileExist fail, ret is %{pubilc}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } - if (!reply.WriteBool(ret)) { - HILOG_ERROR("Parcel IsFileExist result failed"); + if (!reply.WriteInt32(ret)) { + HILOG_ERROR("IsFIleExist fail "); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return false; + return ERR_IPC_ERROR; + } + + if (!reply.WriteBool(isExist)) { + HILOG_ERROR("parameter Mkdir fail to WriteParcelable type"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_IPC_ERROR; } FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return true; + return ERR_OK; } bool FileAccessExtStub::CheckCallingPermission(const std::string &permission) diff --git a/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp b/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp index 921b63f4..9a632255 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_stub_impl.cpp @@ -146,17 +146,17 @@ std::vector FileAccessExtStubImpl::GetRoots() return vec; } -bool FileAccessExtStubImpl::IsFileExist(const Uri &uri) +int FileAccessExtStubImpl::IsFileExist(const Uri &uri, bool &isExist) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); - bool ret = false; + int ret = ERR_ERROR; if (extension_ == nullptr) { HILOG_ERROR("IsFileExist get extension failed."); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } - ret = extension_->IsFileExist(uri); + ret = extension_->IsFileExist(uri, isExist); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/frameworks/innerkits/file_access/src/file_access_helper.cpp b/frameworks/innerkits/file_access/src/file_access_helper.cpp index 8420e8ed..6e4eb1bd 100644 --- a/frameworks/innerkits/file_access/src/file_access_helper.cpp +++ b/frameworks/innerkits/file_access/src/file_access_helper.cpp @@ -272,17 +272,18 @@ std::vector FileAccessHelper::GetRoots() return results; } -bool FileAccessHelper::IsFileExist(Uri &uri) +int FileAccessHelper::IsFileExist(Uri &uri, bool &isExist) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); - bool ret = false; + int ret = ERR_ERROR; + if (!GetProxy()) { HILOG_ERROR("failed with invalid fileAccessExtProxy_"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } - ret = fileAccessExtProxy_->IsFileExist(uri); + ret = fileAccessExtProxy_->IsFileExist(uri, isExist); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp b/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp index bff37573..172b356c 100644 --- a/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp +++ b/frameworks/innerkits/file_access/src/js_file_access_ext_ability.cpp @@ -505,7 +505,7 @@ std::vector JsFileAccessExtAbility::GetRoots() return vec; } -bool JsFileAccessExtAbility::IsFileExist(const Uri &uri) +int JsFileAccessExtAbility::IsFileExist(const Uri &uri, bool &isExist) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "IsFileExist"); HandleScope handleScope(jsRuntime_); @@ -517,17 +517,20 @@ bool JsFileAccessExtAbility::IsFileExist(const Uri &uri) NativeValue* nativeUri = reinterpret_cast(napiUri); NativeValue* argv[] = {nativeUri}; NativeValue* nativeResult = AsnycCallObjectMethod("isFileExist", argv, ARGC_ONE); - bool ret = false; + int ret = ERR_ERROR; if (nativeResult == nullptr) { HILOG_ERROR("call isFileExist with return null."); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } - - if (OHOS::AppExecFwk::UnwrapBoolFromJS2(env, reinterpret_cast(nativeResult), ret)) { + + if (!OHOS::AppExecFwk::UnwrapBoolFromJS2(env, reinterpret_cast(nativeResult), isExist)) { FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } + + ret = NO_ERROR; + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp index 07e1c07e..2abb40b0 100644 --- a/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/interfaces/kits/napi/file_access_module/napi_fileaccess_helper.cpp @@ -626,8 +626,10 @@ napi_value NAPI_IsFileExist(napi_env env, napi_callback_info info) string uriString(uri.get()); auto cbExec = [uriString, result, fileAccessHelper]() -> NError { OHOS::Uri uri(uriString); - *result = fileAccessHelper->IsFileExist(uri); - return NError(ERRNO_NOERR); + bool isExist = false; + int ret = fileAccessHelper->IsFileExist(uri, isExist); + *result = isExist; + return NError(ret); }; auto cbComplete = [result](napi_env env, NError err) -> NVal { if (err) { @@ -636,7 +638,7 @@ napi_value NAPI_IsFileExist(napi_env env, napi_callback_info info) return { NVal::CreateBool(env, *result) }; }; - std::string procedureName = "isFileExist"; + const std::string procedureName = "isFileExist"; NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; -- Gitee From 2ed7ca038a53ddb08cf6400a105d863f4e2dfb24 Mon Sep 17 00:00:00 2001 From: wangjianqiang Date: Tue, 26 Jul 2022 09:57:31 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E6=84=8F=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangjianqiang --- .../src/main/ets/FileExtensionAbility/FileExtensionAbility.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index c58adfb0..17c5a708 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -320,6 +320,7 @@ export default class FileExtAbility extends Extension { let path = this.getPath(sourceFileUri); fileio.accessSync(path); } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'isFileExist error ' + e.message); return false; } return true; -- Gitee