diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 83671a909007f4800c68cf20ea6667538e31cd0a..7d5861a3c26df2b6a5ef7c373d2776b8df4f2a1f 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -376,6 +376,29 @@ export default class FileExtAbility extends Extension { return code; } + deleteTarget(targetUri): void { + let statNew = fs.statSync(targetUri); + if (!statNew){ + return ; + } + if (statNew.isDirectory) { + fs.rmdirSync(targetUri); + } else { + fs.unlinkSync(newPath); + } + } + + deleteTargetFile(targetUri): void { + let statNew = fs.statSync(targetUri); + if (!statNew){ + return ; + } + if (statNew.isDirectory) { + return; + } + fs.unlinkSync(newPath); + } + move(sourceFileUri, targetParentUri): {string, number} { sourceFileUri = this.decode(sourceFileUri); targetParentUri = this.decode(targetParentUri); @@ -402,19 +425,21 @@ export default class FileExtAbility extends Extension { code: E_URIS, }; } + if (oldPath === newPath) { // move to the same directory return { uri: newFileUri, code: ERR_OK, }; - } else if (newPath.match(new RegExp('^' + oldPath + '(/|$)'))) { + } else if (newPath.indexOf(oldPath) === 0 && newPath.charAt(oldPath.length) === '/') { // move to a subdirectory of the source directory return { uri: '', code: E_GETRESULT, }; } + try { // The source file does not exist or the destination is not a directory let isAccess = fs.accessSync(oldPath); @@ -449,10 +474,7 @@ export default class FileExtAbility extends Extension { }; } // when targetFile is exist, delete it - let isAccessNewPath = fs.accessSync(newPath); - if (isAccessNewPath) { - fs.unlinkSync(newPath); - } + this.deleteTarget(newPath); fs.moveFileSync(oldPath, newPath, 0); return { @@ -583,10 +605,7 @@ export default class FileExtAbility extends Extension { }; try { - let isExist = fs.accessSync(newFilePath); - if (isExist) { - fs.unlinkSync(newFilePath); - } + this.deleteTarget(newFilePath) fs.copyFileSync(sourceFilePath, newFilePath); } catch (err) { hilog.error(DOMAIN_CODE, TAG, @@ -602,6 +621,7 @@ export default class FileExtAbility extends Extension { code: ERR_OK, }; try { + this.deleteTargetFile(targetFilePath); fs.copyDirSync(sourceFilePath, targetFilePath, mode); } catch (err) { if (err.code === E_EXIST) { @@ -625,6 +645,8 @@ export default class FileExtAbility extends Extension { } copy(sourceFileUri, targetParentUri, force): {[], number} { + sourceFileUri = this.decode(sourceFileUri); + targetParentUri = this.decode(targetParentUri); let checkRet = this.checkCopyArguments(sourceFileUri, targetParentUri); if (checkRet.code !== ERR_OK) { return checkRet;