OpenHarmony开发者论坛

标题: resourceManager.getRawFd(文件路径.txt)得到的fd是什么? [打印本页]

作者: 深开鸿_王石    时间: 2024-3-6 14:01
标题: resourceManager.getRawFd(文件路径.txt)得到的fd是什么?
[md]用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)](https://docs.openharmony.cn/page ... resource-manager.md)

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

![asyncAndFd.jpg](https://forums-obs.openharmony.c ... arhzr2a3pttcard.jpg "asyncAndFd.jpg")
[/md]
作者: s_hao    时间: 2024-3-18 14:43
由于hap没有解压,所以获取到的fd是hap包的fa,一起返回的还有offset和length,用这三者就可以读取文件了
作者: 深开鸿_王石    时间: 2024-3-19 14:19
回复 s_hao: 这拿的是hap包的句柄,不是rawfile的,所以读出来的是错的哇
作者: s_hao    时间: 2024-3-20 10:11
回复 深开鸿_王石: 返回的offset和length就是rawfile的,读fd的时候用那两个参数读出来的就是rawfile了
作者: 深开鸿_王石    时间: 2024-3-21 10:15
回复 s_hao: 明白了,用fd开文件,用offset算偏移,然后在用len读,是吧
那我还好奇啊,为啥在CPP里用这个OH_ResourceManager_OpenRawFile就可以得到正确的fd呢?这个和arkui里的接口就为啥不同了呢?




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5