积分1636 / 贡献20

提问18答案被采纳66文章40

resourceManager.getRawFd(文件路径.txt)得到的fd是什么?

深开鸿_王石 显示全部楼层 发表于 2024-3-6 14:01:30

用getRawFd得到的资源文件FD,传到nativec++程序,用fstat获取fileinfo,答应出ino

    struct stat fileinfo;
    if (fstat(callbackData->fd, &fileinfo) == -1) {
        OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, "ResfdExecuteCB fstat failed!");
        return;
    }
ResfdExecuteCB fileinfo.stsize:1380131!
ResfdExecuteCB fileinfo.ino:26939!
ResfdExecuteCB fileinfo.mode:33188!
ResfdExecuteCB fileinfo.dev:66352!

然后通过查找发现,这个ino是 /data/app/el1/bundle/public/com.example.asyncandfd/entry.hap

stat 此文件发现:

File: /data/app/el1/bundle/public/com.example.asyncandfd/entry.hap Size: 1380131 Blocks: 2696 IO Blocks: 512 regular file Device: 10330h/66352d Inode: 26939 Links: 1 Device type: 0,0 Access: (0644/-rw-r--r--) Uid: ( 3060/installs) Gid: ( 3060/installs) Access: 2024-03-06 11:46:56.100253412 +0800 Modify: 2024-03-06 11:46:56.116253412 +0800 Change: 2024-03-06 11:46:56.116253412 +0800

对应的文档:

getRawFd(path: string): Promise<RawFileDescriptor>

@ohos.resourceManager (资源管理) (openharmony.cn)

下面这个图片下载后改后缀为zip为测试工程

asyncAndFd.jpg

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论4

s_hao

沙发 发表于 2024-3-18 14:43:36
由于hap没有解压,所以获取到的fd是hap包的fa,一起返回的还有offset和length,用这三者就可以读取文件了

深开鸿_王石

发表于 2024-3-19 14:19  IP属地: - 中国江苏省无锡市 中国电信IDC

回复 s_hao: 这拿的是hap包的句柄,不是rawfile的,所以读出来的是错的哇

s_hao

发表于 2024-3-20 10:11  IP属地: 福建省泉州市

回复 深开鸿_王石: 返回的offset和length就是rawfile的,读fd的时候用那两个参数读出来的就是rawfile了

深开鸿_王石

发表于 2024-3-21 10:15  IP属地: 江苏省无锡市

回复 s_hao: 明白了,用fd开文件,用offset算偏移,然后在用len读,是吧
那我还好奇啊,为啥在CPP里用这个OH_ResourceManager_OpenRawFile就可以得到正确的fd呢?这个和arkui里的接口就为啥不同了呢?

【3 条回复】
共4 条回复,点击查看

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部