From c9479a98e78ed7b734c6158ff353ed8a10a70f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E9=91=AB?= Date: Sat, 15 Mar 2025 18:02:45 +0800 Subject: [PATCH 1/2] close MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 周鑫 --- .../js/src/mod_fs/ani/ets/@ohos.file.fs.ets | 117 +++++++++++++----- .../src/mod_fs/properties/ani/close_ani.cpp | 14 +-- .../js/src/mod_fs/properties/ani/close_ani.h | 2 +- 3 files changed, 91 insertions(+), 42 deletions(-) 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 35f00c94..4986170a 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 @@ -206,7 +206,7 @@ class StatInner implements Stat { native isSymbolicLink(): boolean; } -type FdOrFile = int | File; +type FdOrFile = number | File; type PathOrFd = string | int; type BufferType = string | ArrayBuffer; @@ -302,35 +302,25 @@ class fileIo { static native closeSync(file: FdOrFile): int; - static close(file: FdOrFile): Promise { - return new Promise((resolve: (result: int) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(fileIo.closeSync, file); + static close(file: FdOrFile): Promise { + return new Promise((resolve: (result: undefined) => void, + reject: (e: BusinessError) => void): void => { + let promise = taskpool.execute((file: FdOrFile): void => fileIo.closeSync(file), file); promise.then((ret: NullishType) => { - if (ret === null || ret === undefined) { - let err = new BusinessError(-1, ""); - - reject(err); - } else { - let r = ret as int; - resolve(r); - } + resolve(undefined); + }).catch((e: BusinessError): void => { + reject(e); }); }); } - static close(file: FdOrFile, callback: AsyncCallback): void { - let promise = taskpool.execute(fileIo.closeSync, file); + static close(file: FdOrFile, callback: AsyncCallback): void { + let promise = taskpool.execute((file: FdOrFile): void => fileIo.closeSync(file), file); promise.then((ret: NullishType) => { - let err = new BusinessError(-1, ""); - - if (ret === null || ret === undefined) { - err.code = -1 - callback(err, undefined) - } else { - err.code = 0 - let r = ret as int; - callback(err, r); - } + let e = new BusinessError(0, ""); + callback(e, undefined); + }).catch((e: BusinessError): void => { + callback(e, undefined); }); } @@ -832,15 +822,72 @@ class fileIo { } } -function accessSyncTest1() { - console.println("accessSyncTest1 begin"); +// function accessSyncTest1() { +// console.println("accessSyncTest1 begin"); +// try { +// let ret = fileIo.accessSync("/data/local/tmp/a.txt"); +// console.println(`accessSync result : ${ret}`); +// } catch (error) { +// console.error("accessSyncTest1 Error!", error); +// } +// console.println("accessSyncTest1 end"); +// } + +// function closeSyncTest() { +// console.println("closeSyncTest begin"); +// let file = fileIo.openSync("/data/local/tmp/hello.txt"); +// fileIo.closeSync(file); +// fileIo.closeSync(64); +// console.println("closeSyncTest end"); +// } + +function closeTest() { + console.println("closeTest begin"); + let file = fileIo.openSync("/data/local/tmp/hello.txt"); + try { + await fileIo.close(file).then((result: undefined): void => { + console.println(`closePromiseTest close result: ${result}`); + }).catch((e: Object): void => { + console.error("async closePromiseTest Error!!!", e); + }); + } catch (error) { + console.error("Promise: Error getting temp file:", error); + } + console.println("closeTest end"); + try { - let ret = fileIo.accessSync("/data/local/tmp/a.txt"); - console.println(`accessSync result : ${ret}`); + await fileIo.close(64).then((result: undefined): void => { + console.println(`closePromiseTest close result: ${result}`); + }).catch((e: Object): void => { + console.error("async closePromiseTest Error!!!", e); + }); } catch (error) { - console.error("accessSyncTest1 Error!", error); + console.error("Promise number : Error getting temp file:", error); } - console.println("accessSyncTest1 end"); + console.println("closeTest end"); +} + +function closeTest1() { + console.println("closeCallbackTest begin"); + let file = fileIo.openSync("/data/local/tmp/hello.txt"); + console.println(`open file with mode, fd=${file.fd}, path=${file.path}, name=${file.name}`); + + fileIo.close(file, (err: BusinessError) => { + if (err.code == 0) { + console.log("closeCallbackTest: close result!"); + } else { + console.error("closeCallbackTest: close Error:", err); + } + }); + + fileIo.close(64, (err: BusinessError) => { + if (err.code == 0) { + console.log("closeCallbackTest: close result!"); + } else { + console.error("closeCallbackTest: close Error:", err); + } + }); + console.println("closeCallbackTest end"); } // function closeSyncTest1() { @@ -1372,10 +1419,12 @@ function openCallbackTest() { function main() { console.println("---------- hello ani --------------"); - accessSyncTest1(); - openPromiseTest(); - openCallbackTest(); - openSyncTest(); + // accessSyncTest1(); + // openPromiseTest(); + // openCallbackTest(); + // openSyncTest(); + closeTest(); + closeTest1(); // closeSyncTest1(); // closeSyncTest2(); // closeSyncTest3(); diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp index 313a5c14..b4ce81a7 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp @@ -33,7 +33,7 @@ tuple ParseFd(ani_env *env, ani_object obj) { int32_t result = -1; ani_class IntClass; - env->FindClass("Lstd/core/Int;", &IntClass); + env->FindClass("Lstd/core/Double;", &IntClass); ani_boolean isInt; env->Object_InstanceOf(obj, IntClass, &isInt); if (isInt) { @@ -51,8 +51,8 @@ tuple ParseFd(ani_env *env, ani_object obj) ani_boolean isFile; env->Object_InstanceOf(obj, FileClass, &isFile); if (isFile) { - ani_int fd; - if (ANI_OK != env->Object_GetPropertyByName_Int(obj, "fd", &fd)) { + ani_double fd; + if (ANI_OK != env->Object_GetPropertyByName_Double(obj, "fd", &fd)) { HILOGE("Get fd in class file failed"); return { false, result }; } @@ -63,20 +63,20 @@ tuple ParseFd(ani_env *env, ani_object obj) return { false, result }; } -ani_int CloseAni::CloseSync(ani_env *env, [[maybe_unused]] ani_class clazz, ani_object obj) +void CloseAni::CloseSync(ani_env *env, [[maybe_unused]] ani_class clazz, ani_object obj) { auto [succ, fd] = ParseFd(env, obj); if (!succ) { HILOGE("Parse fd argument failed"); - return -1; + return; } auto ret = CloseCore::DoClose(fd); if (!ret.IsSuccess()) { HILOGE("Close %d failed", fd); - return -1; + return; } - return 0; + return; } } // namespace ANI diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.h b/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.h index 7c6202f6..cd2715eb 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.h +++ b/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.h @@ -25,7 +25,7 @@ namespace ANI { class CloseAni final { public: - static ani_int CloseSync(ani_env *env, [[maybe_unused]] ani_class clazz, ani_object obj); + static void CloseSync(ani_env *env, [[maybe_unused]] ani_class clazz, ani_object obj); }; } // namespace ANI -- Gitee From c6c24f204586a3888459227b5f669fcd0bce841f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E9=91=AB?= Date: Sat, 15 Mar 2025 19:03:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=84=8F=E8=A7=81=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 周鑫 --- interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp index b4ce81a7..773fb346 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/close_ani.cpp @@ -76,7 +76,6 @@ void CloseAni::CloseSync(ani_env *env, [[maybe_unused]] ani_class clazz, ani_obj HILOGE("Close %d failed", fd); return; } - return; } } // namespace ANI -- Gitee