欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】

【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】

2025/6/6 15:26:45 来源:https://blog.csdn.net/qq_45106034/article/details/148449049  浏览:    关键词:【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】

鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API。

// 导入需要的模块
import fs from '@ohos.file.fs';const TAG="Index"
@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button("创建目录").margin({ top: 10 }).onClick(() => {// 调用示例this.createDirsByRelativePath('path/to/your/dir');})Button("创建文件").margin({ top: 10 }).onClick(() => {// 调用示例this.createFile('path/to/your/dir/a.txt');})}.width('100%')}.height('100%')}/*** 创建文件* @param featurePath*/async createFile(featurePath:string){let mFeaturePath = "";if (featurePath.indexOf("/") != -1) {//创建目录let lastAIndex = featurePath.lastIndexOf('/');let fFileDir: string = featurePath.slice(0, lastAIndex);let fileName: string = featurePath.slice(lastAIndex + 1);console.info(TAG, "arrPath:" + fFileDir);if (fFileDir.length != 0) {await this.createDirsByRelativePath(fFileDir);mFeaturePath = getContext(this).filesDir + fFileDir + "/" + fileName;} else {mFeaturePath = getContext(this).filesDir + "/" + fileName;}} else {mFeaturePath = getContext(this).filesDir + "/" + featurePath;}console.info(TAG, "mFeaturePath:" + mFeaturePath);}// 递归创建目录async createMultiDirs(dirPath: string): Promise<void> {try {// 先检查目录是否存在let isExist = await fs.access(dirPath);if (isExist) {console.info(`Directory already exists: ${dirPath}`);return;}} catch (err) {// 如果目录不存在,则继续创建}// 获取父目录const parentDir = dirPath.substring(0, dirPath.lastIndexOf('/'));// 如果父目录不是根目录,且父目录不存在,则递归创建父目录if (parentDir && parentDir !== '/' && parentDir !== '') {try {// 检查父目录是否存在,如果不存在则递归创建await this.createMultiDirs(parentDir);} catch (err) {console.error(`Failed to create parent directory: ${parentDir}, error: ${JSON.stringify(err)}`);}}// 创建当前目录try {await fs.mkdir(dirPath);console.info(`Directory created: ${dirPath}`);} catch (err) {// 如果错误码为13900015(文件已存在),则忽略,否则抛出错误if (err.code !== 13900015) {console.error(`Failed to create directory: ${dirPath}, error: ${JSON.stringify(err)}`);}}}// 创建相对路径的多级目录(入口函数)async createDirsByRelativePath(relativePath: string): Promise<void> {const context = getContext();const baseDir = context.filesDir;const targetDir = baseDir + '/' + relativePath;try {await this.createMultiDirs(targetDir);console.info('All directories created successfully.');} catch (err) {console.error(`Failed to create directories: ${JSON.stringify(err)}`);}}// 创建多级目录async createDirs(basePath: string, relativePath: string): Promise<boolean> {const fullPath = basePath + '/' + relativePath;try {await fs.mkdir(fullPath);console.info(`目录创建成功: ${fullPath}`);return true;} catch (error) {console.error(`目录创建失败: ${JSON.stringify(error)}`);return false;}}// 创建文件(带路径自动创建)async createFileWithPath(basePath: string, filePath: string, content: string = ''): Promise<boolean> {const fullPath = basePath + '/' + filePath;try {// 分离目录路径和文件名const lastSlashIndex = filePath.lastIndexOf('/');const dirPath = lastSlashIndex > 0 ? filePath.substring(0, lastSlashIndex) : '';// 创建目录(如果目录路径存在)if (dirPath) {await this.createDirs(basePath, dirPath);}// 创建文件并写入内容const file = await fs.open(fullPath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);if (content) {await fs.write(file.fd, content);}await fs.close(file.fd);console.info(`文件创建成功: ${fullPath}`);return true;} catch (error) {console.error(`文件创建失败: ${JSON.stringify(error)}`);return false;}}// 检查文件是否存在async fileExists(basePath: string, filePath: string): Promise<boolean> {const fullPath = basePath + '/' + filePath;try {await fs.access(fullPath);return true;} catch {return false;}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词