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 faf539b46a7f93916aad61a21ffc975afcb70cfe..f1294bbeae50d96b00d35e814f14c863571b079d 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 @@ -32,6 +32,7 @@ #include "stat_ani.h" #include "truncate_ani.h" #include "unlink_ani.h" +#include "write_ani.h" using namespace OHOS::FileManagement::ModuleFileIO::ANI; @@ -70,7 +71,7 @@ static ani_status BindStaticMethods(ani_env *env) 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) }, }; return BindClass(env, className, methods); } diff --git a/interfaces/kits/js/src/mod_fs/ani/file_fs_class.ets b/interfaces/kits/js/src/mod_fs/ani/file_fs_class.ets index e320a1087f6dcdb1b1529b47227bd61245a21526..e7fee69af2acb049453258f1501126599d67ef4b 100644 --- a/interfaces/kits/js/src/mod_fs/ani/file_fs_class.ets +++ b/interfaces/kits/js/src/mod_fs/ani/file_fs_class.ets @@ -48,6 +48,12 @@ export interface ReadTextOptions extends ReadOptions { encoding?: string; } +export interface WriteOptions { + offset ?: long; + length ?: long; + encoding ?: string; +} + interface File { fd: int; path: String; @@ -140,6 +146,7 @@ class StatInner implements Stat { type FdOrFile = int | File; type PathOrFd = string | int; +type StrOrBuf = string | ArrayBuffer; class fileIo { static native closeSync(file: FdOrFile): int; @@ -488,6 +495,80 @@ class fileIo { }); } + static native writeSync(fd: int, buffer: StrOrBuf, options?: WriteOptions): long; + + static writeSync1(fd: int, buffer: StrOrBuf, options: WriteOptions): long { + return fileIo.writeSync(fd, buffer, options); + } + static writeSync2(fd: int, buffer: StrOrBuf): long { + return fileIo.writeSync(fd, buffer); + } + + static write(fd: int, buffer: StrOrBuf, options: WriteOptions): Promise { + return new Promise((resolve: (result: long) => void, reject: (e: BusinessError) => void) => { + let promise = taskpool.execute(fileIo.writeSync1, fd, buffer, options); + promise.then((ret: NullishType) => { + let result = ret as long + if (ret === null || ret === undefined) { + let err = new BusinessError(); + err.code = -1; + reject(err); + } else { + resolve(result); + } + }); + }); + } + + static write(fd: int, buffer: StrOrBuf): Promise { + return new Promise((resolve: (result: long) => void, reject: (e: BusinessError) => void) => { + let promise = taskpool.execute(fileIo.writeSync2, fd, buffer); + promise.then((ret: NullishType) => { + let result = ret as long + if (ret === null || ret === undefined) { + let err = new BusinessError(); + err.code = -1; + reject(err); + } else { + resolve(result); + } + }); + }); + } + + static write(fd: int, buffer: StrOrBuf, options: WriteOptions, callback: AsyncCallback): void { + let p1 = taskpool.execute(fileIo.writeSync1, fd, buffer, options); + p1.then((ret: NullishType) => { + let err = new BusinessError(); + if (ret === null || ret === undefined) { + console.println("-------- err code = -1 -------------"); + err.code = -1 + callback(err, undefined) + } else { + console.println("-------- err code = 0 -------------"); + err.code = 0 + let r = ret as long; + callback(err, r); + } + }); + } + + static write(fd: int, buffer: StrOrBuf, callback: AsyncCallback): void { + let p1 = taskpool.execute(fileIo.writeSync2, fd, buffer); + p1.then((ret: NullishType) => { + let err = new BusinessError(); + if (ret === null || ret === undefined) { + console.println("-------- err code = -1 -------------"); + err.code = -1 + callback(err, undefined) + } else { + console.println("-------- err code = 0 -------------"); + err.code = 0 + let r = ret as long; + callback(err, r); + } + }); + } } function closeSyncTest1() { @@ -782,6 +863,39 @@ function unlinkSyncTest() { console.println("unlinkSyncTest 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; + 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 writeSyncTest2() { + console.println("writeSyncTest2 begin"); + try { + let mode = 2; + let file = fileIo.openSync("/data/local/tmp/b1.txt", mode); + let fd = file.fd; + const options: WriteOptions = { + offset: 100, + }; + let length = fileIo.writeSync(fd, new ArrayBuffer(1024), options); + console.println(`write file length=${length}`); + } catch (error) { + console.error("writeSyncTest2 Error!", error); + } + console.println("writeSyncTest2 end"); +} function main() { console.println("---------- hello ani --------------"); @@ -805,6 +919,7 @@ function main() { truncateSyncTest2(); truncateSyncTest3(); unlinkSyncTest(); - + writeSyncTest1(); + writeSyncTest2(); console.println("---------- hello ani end ---------------"); } \ No newline at end of file