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 35979b1782f39808677ff873b204a3bb776b887b..9dbd82c357dedc707f56b88577e060c865aaee4e 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 | number; 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); }); } @@ -821,15 +811,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 { - let ret = fileIo.accessSync("/data/local/tmp/a.txt"); - console.println(`accessSync result : ${ret}`); + 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("accessSyncTest1 Error!", error); + console.error("Promise: Error getting temp file:", error); } - console.println("accessSyncTest1 end"); + console.println("closeTest end"); + + try { + 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("Promise number : Error getting temp file:", error); + } + 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() { @@ -1390,10 +1437,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 313a5c14bdfb7076739abb0f76b227abe7f550e1..773fb346056dd6c5605ea9c848c013672119dec1 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,19 @@ 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; } } // 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 7c6202f65bf88f07422b5983e284d66e0425d331..cd2715ebeeafc532cce408b4d358d34d8e17adfa 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