From 0c9f56f0b1deb05ab5cb16230c31dfcce9348be6 Mon Sep 17 00:00:00 2001 From: tianp Date: Wed, 19 Mar 2025 16:44:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I519523955e1065cb3d8feb0571650d30571d71da --- .../js/src/mod_fs/ani/bind_function_class.cpp | 6 +- .../js/src/mod_fs/ani/ets/@ohos.file.fs.ets | 233 ++++++++---------- .../js/src/mod_fs/properties/ani/move_ani.cpp | 6 + .../src/mod_fs/properties/ani/write_ani.cpp | 8 + 4 files changed, 119 insertions(+), 134 deletions(-) diff --git a/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp index 489841a8..065495c9 100644 --- a/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp @@ -79,15 +79,15 @@ static ani_status BindStaticMethods(ani_env *env) ani_native_function { "listFileSync", nullptr, reinterpret_cast(ListFileAni::ListFileSync) }, ani_native_function { "mkdirSync", "Lstd/core/String;:V", reinterpret_cast(MkdirkAni::MkdirSync0) }, ani_native_function { "mkdirSync", "Lstd/core/String;Z:V", reinterpret_cast(MkdirkAni::MkdirSync1) }, - // ani_native_function { "moveFileSync", nullptr, reinterpret_cast(MoveAni::MoveFileSync) }, - // ani_native_function { "openSync", nullptr, reinterpret_cast(OpenAni::OpenSync) }, + ani_native_function { "moveFileSync", nullptr, reinterpret_cast(MoveAni::MoveFileSync) }, + ani_native_function { "openSync", nullptr, reinterpret_cast(OpenAni::OpenSync) }, ani_native_function { "readSync", nullptr, reinterpret_cast(ReadAni::ReadSync) }, ani_native_function { "readTextSync", nullptr, reinterpret_cast(ReadTextAni::ReadTextSync) }, ani_native_function { "rmdirSync", nullptr, reinterpret_cast(RmdirAni::RmdirSync) }, ani_native_function { "statSync", nullptr, reinterpret_cast(StatAni::StatSync) }, ani_native_function { "truncateSync", nullptr, reinterpret_cast(TruncateAni::TruncateSync) }, ani_native_function { "unlinkSync", nullptr, reinterpret_cast(UnlinkAni::UnlinkSync) }, - // ani_native_function { "writeSync", nullptr, reinterpret_cast(WriteAni::WriteSync) }, + ani_native_function { "writeSync", nullptr, reinterpret_cast(WriteAni::WriteSync) }, }; return BindClass(env, className, methods); } 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 8738e3c4..342660cd 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 @@ -186,40 +186,30 @@ function openSync(path: string, mode?: number): File { return FileIoImpl.openSync(path, mode); } -function openSync1(path: String, mode: number): File { - return FileIoImpl.openSync(path, mode); -} - -function openSync2(path: String): File { - return FileIoImpl.openSync(path); -} - -function open(path: String, mode: number): Promise { - return new Promise((resolve: (result: File) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(openSync1, path, mode); - promise.then((ret: NullishType): void => { - let file = ret as File; - resolve(file); - }).catch((e: BusinessError): void => { - reject(e); - }); - }); -} - -function open(path: String): Promise { +function open(path: String, mode?: number): Promise { return new Promise((resolve: (result: File) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(openSync2, path); - promise.then((ret: NullishType): void => { - let file = ret as File; - resolve(file); - }).catch((e: BusinessError): void => { - reject(e); - }); + if (mode === undefined) { + let promise = taskpool.execute(FileIoImpl.openSync, path); + promise.then((ret: NullishType): void => { + let file = ret as File; + resolve(file); + }).catch((e: BusinessError): void => { + reject(e); + }); + } else { + let promise = taskpool.execute(FileIoImpl.openSync, path, mode); + promise.then((ret: NullishType): void => { + let file = ret as File; + resolve(file); + }).catch((e: BusinessError): void => { + reject(e); + }); + } }); } function open(path: String, mode: number, callback: AsyncCallback): void { - let promise = taskpool.execute(openSync1, path, mode); + let promise = taskpool.execute(FileIoImpl.openSync, path, mode); promise.then((ret: NullishType): void => { let e = new BusinessError(0, ""); let file = ret as File; @@ -231,7 +221,7 @@ function open(path: String, mode: number, callback: AsyncCallback): } function open(path: String, callback: AsyncCallback): void { - let promise = taskpool.execute(openSync2, path); + let promise = taskpool.execute(FileIoImpl.openSync, path); promise.then((ret: NullishType): void => { let e = new BusinessError(0, ""); let file = ret as File; @@ -246,71 +236,48 @@ function writeSync(fd: number, buffer: string | ArrayBuffer, options?: WriteOpti return FileIoImpl.writeSync(fd, buffer, options); } -function writeSync1(fd: number, buffer: string | ArrayBuffer, options: WriteOptions): number { - return FileIoImpl.writeSync(fd, buffer, options); -} - -function writeSync2(fd: number, buffer: string | ArrayBuffer): number { - return FileIoImpl.writeSync(fd, buffer); -} - -function write(fd: number, buffer: string | ArrayBuffer, options: WriteOptions): Promise { +function write(fd: number, buffer: string | ArrayBuffer, options?: WriteOptions): Promise { return new Promise((resolve: (result: number) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(writeSync1, fd, buffer, options); - promise.then((ret: NullishType): void => { - let result = ret as number - if (ret === null || ret === undefined) { - let err = new BusinessError(-1, ""); - reject(err); - } else { + if (options === undefined) { + let promise = taskpool.execute(FileIoImpl.writeSync, fd, buffer, options); + promise.then((ret: NullishType): void => { + let result = ret as number resolve(result); - } - }); - }); -} - -function write(fd: number, buffer: string | ArrayBuffer): Promise { - return new Promise((resolve: (result: number) => void, reject: (e: BusinessError) => void) => { - let promise = taskpool.execute(writeSync2, fd, buffer); - promise.then((ret: NullishType): void => { - let result = ret as number - if (ret === null || ret === undefined) { - let err = new BusinessError(-1, ""); - reject(err); - } else { + }).catch((e: BusinessError): void => { + reject(e); + }); + } else { + let promise = taskpool.execute(FileIoImpl.writeSync, fd, buffer, options); + promise.then((ret: NullishType): void => { + let result = ret as number resolve(result); - } - }); + }).catch((e: BusinessError): void => { + reject(e); + }); + } }); } -function write(fd: number, buffer: string | ArrayBuffer, options: WriteOptions, callback: AsyncCallback): void { - let promise = taskpool.execute(writeSync1, fd, buffer, options); +function write(fd: number, buffer: string | ArrayBuffer, options: WriteOptions, + callback: AsyncCallback): void { + let promise = taskpool.execute(FileIoImpl.writeSync, fd, buffer, options); promise.then((ret: NullishType): void => { - let err = new BusinessError(-1, ""); - if (ret === null || ret === undefined) { - err.code = -1 - callback(err, undefined) - } else { - err.code = 0 - let r = ret as number; - callback(err, r); - } + let e = new BusinessError(0, ""); + let result = ret as number; + callback(e, result); + }).catch((e: BusinessError): void => { + callback(e, 0); }); } function write(fd: number, buffer: string | ArrayBuffer, callback: AsyncCallback): void { - let promise = taskpool.execute(writeSync2, fd, buffer); + let promise = taskpool.execute(FileIoImpl.writeSync, fd, buffer); promise.then((ret: NullishType): void => { - let err = new BusinessError(-1, ""); - if (ret === null || ret === undefined) { - err.code = -1 - callback(err, undefined) - } else { - err.code = 0 - let r = ret as number; - callback(err, r); - } + let e = new BusinessError(0, ""); + let result = ret as number; + callback(e, result); + }).catch((e: BusinessError): void => { + callback(e, 0); }); } @@ -853,13 +820,13 @@ class FileIoImpl { // let file = fileIo.openSync("/data/local/tmp/a.txt", 2); // 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 success!"); - } else { - console.error("closeCallbackTest: close Error:", err); - } - }); + // fileIo.close(file, (err: BusinessError) => { + // if (err.code === 0) { + // console.log("closeCallbackTest: close success!"); + // } else { + // console.error("closeCallbackTest: close Error:", err); + // } + // }); // console.println("closeCallbackTest end"); // } @@ -977,27 +944,31 @@ class FileIoImpl { // console.println("mkdirCallbackTest end"); // } -// function moveSyncTest() { -// console.println("moveSyncTest begin") -// fileIo.moveFileSync("/data/local/tmp/a.txt", "/data/local/tmp/a1.txt", 1) -// console.println("moveSyncTest end") -// } - -// function openSyncTest() { -// console.println("openSyncTest begin"); -// try { -// // 不指定mode -// let file = fileIo.openSync("/data/local/tmp/a.txt"); -// console.println(`open file without mode, fd=${file.fd}, path=${file.path}, name=${file.name}`); -// // 以可读可写方式打开 -// let mode = OpenMode.READ_WRITE; -// file = fileIo.openSync("/data/local/tmp/a.txt", mode); -// console.println(`open file with mode=${mode}, fd=${file.fd}, path=${file.path}, name=${file.name}`); -// } catch (error) { -// console.error("openSyncTest Error!", error); -// } -// console.println("openSyncTest end"); -// } +function moveSyncTest() { + console.println("moveSyncTest begin"); + try { + moveFileSync("/data/local/tmp/a.txt", "/data/local/tmp/a1.txt", 1); + } catch (error) { + console.error("moveSyncTest Error!", error); + } + console.println("moveSyncTest end"); +} + +function openSyncTest() { + console.println("openSyncTest begin"); + try { + // 不指定mode + let file = openSync("/data/local/tmp/a.txt"); + console.println(`open file without mode, fd=${file.fd}, path=${file.path}, name=${file.name}`); + // 以可读可写方式打开 + let mode = 2; + file = openSync("/data/local/tmp/a.txt", mode); + console.println(`open file with mode=${mode}, fd=${file.fd}, path=${file.path}, name=${file.name}`); + } catch (error) { + console.error("openSyncTest Error!", error); + } + console.println("openSyncTest end"); +} // function openPromiseTest() { // console.println("openPromiseTest begin"); @@ -1298,23 +1269,23 @@ class FileIoImpl { // console.println("unlinkCallbackTest end"); // } -// function writeSyncTest1() { -// console.println("writeSyncTest1 begin"); -// try { -// let mode = 2; -// let file = fileIo.openSync("/data/local/tmp/a1.txt", mode); -// let fd = file.fd; -// console.println(`file open fd=${fd}`); -// const options: WriteOptions = { -// encoding: "utf-8", -// }; -// let length = fileIo.writeSync(fd, "hello,world!", options); -// console.println(`write file length=${length}`); -// } catch (error) { -// console.error("writeSyncTest1 Error!", error); -// } -// console.println("writeSyncTest1 end"); -// } +function writeSyncTest1() { + console.println("writeSyncTest1 begin"); + try { + let mode = 2; + let file = openSync("/data/local/tmp/a.txt", mode); + let fd = file.fd; + console.println(`file open fd=${fd}`); + const options: WriteOptions = { + encoding: "utf-8", + }; + let length = writeSync(fd, "hello,world!", options); + console.println(`write file length=${length}`); + } catch (error) { + console.error("writeSyncTest1 Error!", error); + } + console.println("writeSyncTest1 end"); +} // function writeSyncTest2() { // console.println("writeSyncTest2 begin"); @@ -1436,7 +1407,7 @@ function main() { // accessSyncTest1(); // openPromiseTest(); // openCallbackTest(); - // openSyncTest(); + openSyncTest(); // closeSyncTest1(); // closeSyncTest2(); // closeSyncTest3(); @@ -1452,7 +1423,7 @@ function main() { // mkdirSyncTest3(); // mkdirPromiseTest(); // mkdirCallbackTest(); - // moveSyncTest(); + moveSyncTest(); // readSyncTest1(); // readSyncTest2(); // readSyncTest3(); @@ -1469,7 +1440,7 @@ function main() { // unlinkSyncTest(); // unlinkPromiseTest(); // unlinkCallbackTest(); - // writeSyncTest1(); + writeSyncTest1(); // writeSyncTest2(); // writePromiseTest(); // writeCallbackTest(); diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/move_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/move_ani.cpp index 0b5c597a..3243554f 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/move_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/move_ani.cpp @@ -15,6 +15,7 @@ #include "move_ani.h" +#include "error_handler.h" #include "filemgmt_libhilog.h" #include "move_core.h" #include "type_converter.h" @@ -30,21 +31,26 @@ void MoveAni::MoveFileSync( auto [succSrc, srcPath] = TypeConverter::ToUTF8String(env, src); if (!succSrc) { HILOGE("Invalid src"); + ErrorHandler::Throw(env, EINVAL); return; } auto [succDest, destPath] = TypeConverter::ToUTF8String(env, dest); if (!succDest) { HILOGE("Invalid dest"); + ErrorHandler::Throw(env, EINVAL); return; } auto [succMode, modeOp] = TypeConverter::ToOptionalInt32(env, mode); if (!succMode) { HILOGE("Invalid mode"); + ErrorHandler::Throw(env, EINVAL); return; } auto ret = MoveCore::DoMove(srcPath, destPath, modeOp); if (!ret.IsSuccess()) { HILOGE("Move failed"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return; } } diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/write_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/write_ani.cpp index 249f6447..9744c32d 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/write_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/write_ani.cpp @@ -17,6 +17,7 @@ #include #include "ani_helper.h" +#include "error_handler.h" #include "filemgmt_libhilog.h" #include "type_converter.h" #include "write_core.h" @@ -94,6 +95,7 @@ ani_double WriteAni::WriteSync( auto [succOp, op] = ToWriteOptions(env, options); if (!succOp) { HILOGE("Failed to resolve options!"); + ErrorHandler::Throw(env, EINVAL); return -1; } @@ -102,11 +104,14 @@ ani_double WriteAni::WriteSync( auto [succBuf, buffer] = TypeConverter::ToUTF8String(env, stringBuffer); if (!succBuf) { HILOGE("Failed to resolve stringBuffer!"); + ErrorHandler::Throw(env, EINVAL); return -1; } auto ret = WriteCore::DoWrite(static_cast(fd), buffer, op); if (!ret.IsSuccess()) { HILOGE("write buffer failed!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return -1; } return static_cast(ret.GetData().value()); @@ -117,11 +122,14 @@ ani_double WriteAni::WriteSync( auto [succBuf, buffer] = TypeConverter::ToArrayBuffer(env, arrayBuffer); if (!succBuf) { HILOGE("Failed to resolve arrayBuffer!"); + ErrorHandler::Throw(env, EINVAL); return -1; } auto ret = WriteCore::DoWrite(static_cast(fd), buffer, op); if (!ret.IsSuccess()) { HILOGE("write buffer failed!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return -1; } return static_cast(ret.GetData().value()); -- Gitee From 1f6752c09d7ecc5dfd2286589efe9871e63e693b Mon Sep 17 00:00:00 2001 From: tianp Date: Wed, 19 Mar 2025 17:35:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?file=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I95c19be530cbc8d0764f81f48a993feefcc40dca --- .../kits/js/src/mod_fs/class_file/ani/file_ani.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/interfaces/kits/js/src/mod_fs/class_file/ani/file_ani.cpp b/interfaces/kits/js/src/mod_fs/class_file/ani/file_ani.cpp index c404e0a6..af6e1d32 100644 --- a/interfaces/kits/js/src/mod_fs/class_file/ani/file_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/class_file/ani/file_ani.cpp @@ -45,17 +45,21 @@ ani_string FileAni::GetParent(ani_env *env, [[maybe_unused]] ani_object object) auto fsFile = Unwrap(env, object); if (fsFile == nullptr) { HILOGE("Cannot unwrap fsfile!"); + ErrorHandler::Throw(env, UNKNOWN_ERR); return {}; } auto ret = fsFile->GetParent(); if (!ret.IsSuccess()) { HILOGE("Cannot get file parent!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return {}; } auto value = ret.GetData().value(); auto [succ, parent] = TypeConverter::ToAniString(env, value); if (!succ) { HILOGE("Cannot convert file parent to ani string!"); + NError(EINVAL).ThrowErr(env); return {}; } return parent; @@ -72,11 +76,14 @@ void FileAni::Lock(ani_env *env, [[maybe_unused]] ani_object object, ani_object auto fsFile = Unwrap(env, object); if (fsFile == nullptr) { HILOGE("Cannot unwrap fsfile!"); + ErrorHandler::Throw(env, UNKNOWN_ERR); return; } auto ret = fsFile->Lock(exc); if (!ret.IsSuccess()) { HILOGE("Lock file failed!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return; } } @@ -92,11 +99,14 @@ void FileAni::TryLock(ani_env *env, [[maybe_unused]] ani_object object, ani_obje auto fsFile = Unwrap(env, object); if (fsFile == nullptr) { HILOGE("Cannot unwrap fsfile!"); + ErrorHandler::Throw(env, UNKNOWN_ERR); return; } auto ret = fsFile->TryLock(exc); if (!ret.IsSuccess()) { HILOGE("TryLock file failed!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return; } } @@ -106,11 +116,14 @@ void FileAni::UnLock(ani_env *env, [[maybe_unused]] ani_object object) auto fsFile = Unwrap(env, object); if (fsFile == nullptr) { HILOGE("Cannot unwrap fsfile!"); + ErrorHandler::Throw(env, UNKNOWN_ERR); return; } auto ret = fsFile->UnLock(); if (!ret.IsSuccess()) { HILOGE("UnLock file failed!"); + const auto &err = ret.GetError(); + ErrorHandler::Throw(env, err); return; } } -- Gitee