HarmonyOS 鸿蒙Next请问为什么这段代码一直没办法创建文件,怎么解决?

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next请问为什么这段代码一直没办法创建文件,怎么解决?

一直报错Operation not permitted,但是怎么样添加创建和读写文件的权限呢
function createFile(): void {
console.log(filesDir)
let file = fs.openSync(filesDir + ‘/test.txt’, fs.OpenMode.READ_WRITE|fs.OpenMode.CREATE);
let isWritten:boolean=false
let writeLen = fs.writeSync(file.fd, “Try to write str.”);
console.info("The length of str is: " + writeLen);
let arrayBuffer = new ArrayBuffer(1024);
let readOptions: ReadOptions = {
offset: 0,
length: arrayBuffer.byteLength
};
let readLen = fs.readSync(file.fd, arrayBuffer, readOptions);
let buf = buffer.from(arrayBuffer, 0, readLen);
console.info("the content of file: " + buf.toString());
isWritten=true
fs.closeSync(file);
}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>


关于HarmonyOS 鸿蒙Next请问为什么这段代码一直没办法创建文件,怎么解决?的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

15 回复

楼主您好,你的filesDir是要为沙箱路径的。需要先通过context获取到沙箱路径后再进行使用。可以参考如下代码。

let context = getContext(this) as common.UIAbilityContext;
let filesDir = context.filesDir;

我也出现不被允许了,在安全组件里面获取到拍照的沙箱图片路径,然后想复制到缓存路径
let file = fs.openSync(photoUri, fs.OpenMode.CREATE); 这一步直接报错Operation not permitted

HarmonyOS的开发者模式提供了很多实用的工具,方便我们进行调试和优化。

我也遇到这个问题

我这边已经可以了,openmode权限后面加读写权限

上面的方法没有看到你创建txt文件的代码 这部分需要先创建了 才能写入

let file = fs.openSync(filesDir + ‘/test.txt’, fs.OpenMode.READ_WRITE|fs.OpenMode.CREATE) 有啊

我没说清楚 是fileDir 这个你的文件路径是哪个

可以搜一下安全组件,savebutton这个组件,不需要获取权限即可做你想要的操作了

啊这···我只需要保存数据,媒体控件没用啊

不能直接在公共区域创建文件,先创建在沙箱,在保存至公共区域

有可能。我的理解。是错误的。可以参考下。你可能需要在应用的配置文件config.json中添加相应的权限声明。具体来说,你需要在config.jsonmodule部分添加requestPermissions字段,如下所示:

json<br>{<br>&nbsp;&nbsp;"configurations":&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;"Global":&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"systemCapabiliteis":&nbsp;[],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"module":&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"package":&nbsp;"com.example.myapplication",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"name":&nbsp;".MyApplication",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"mainAbility":&nbsp;".MainAbility",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"deviceType":&nbsp;"phone",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"versionCode":&nbsp;1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"versionName":&nbsp;"1.0",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"requestPermissions":&nbsp;[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ohos.permission.WRITE_EXTERNAL_STORAGE",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ohos.permission.READ_EXTERNAL_STORAGE"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>}<br>

这里的requestPermissions数组包含了你的应用请求的权限,ohos.permission.WRITE_EXTERNAL_STORAGE用于写入外部存储,而ohos.permission.READ_EXTERNAL_STORAGE用于读取外部存储。

然后,在你的代码中,你可能还需要检查权限是否被授予,这可以通过调用context.checkPermission函数来完成。如果权限未被授予,你可以通过context.requestPermissionsFromUser函数来请求用户授权。

这是一个示例:

js<br>import&nbsp;featureAbility&nbsp;from&nbsp;'@ohos.ability.featureAbility';<br>import&nbsp;fs&nbsp;from&nbsp;'@ohos.file';<br><br>let&nbsp;context&nbsp;=&nbsp;featureAbility.getContext();<br><br>//&nbsp;检查权限<br>let&nbsp;permission&nbsp;=&nbsp;context.checkPermission('ohos.permission.WRITE_EXTERNAL_STORAGE',&nbsp;'',&nbsp;'');<br>if&nbsp;(permission&nbsp;!=&nbsp;featureAbility.PermissionState.GRANTED)&nbsp;{<br>&nbsp;&nbsp;//&nbsp;请求权限<br>&nbsp;&nbsp;let&nbsp;permissions&nbsp;=&nbsp;['ohos.permission.WRITE_EXTERNAL_STORAGE'];<br>&nbsp;&nbsp;let&nbsp;requestCode&nbsp;=&nbsp;1;<br>&nbsp;&nbsp;context.requestPermissionsFromUser(permissions,&nbsp;requestCode);<br>}<br><br>//&nbsp;然后你可以继续你的文件操作代码...<br>
请注意,你可能需要根据你的应用的具体需求调整这些代码。

emmmm没有config.json这个文件啊

我理解就是没有他。所以你要创建它。然后按以下内容
{ “module”: { … “reqPermissions”: [ { “name”: “ohos.permission.WRITE_EXTERNAL_STORAGE”, “reason”: “需要此权限来写入外部存储。”, “used”: true }, { “name”: “ohos.permission.READ_EXTERNAL_STORAGE”, “reason”: “需要此权限来读取外部存储。”, “used”: true } ], … } }

你再琢磨琢磨吧,就这样了,再多我也帮不了你了。

回到顶部