首页 > 编程语言 >鸿蒙开发进阶(HarmonyOS )FileUri开发指南(C/C++)

鸿蒙开发进阶(HarmonyOS )FileUri开发指南(C/C++)

时间:2024-11-06 15:47:20浏览次数:5  
标签:进阶 OH URI C++ uri char HarmonyOS uriResult FileUri

 鸿蒙NEXT开发实战往期必看文章:

一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!

“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

HarmonyOS NEXT应用开发案例实践总结合(持续更新......)

HarmonyOS NEXT应用开发性能优化实践总结(持续更新......)


场景介绍

FileUri提供了关于文件URI的基本操作,对外提供了URI与沙箱路径之间互相转换、远端URI判定、获取URI所在目录路径的URI等接口,方便用户将文件URI与沙箱路径相互转换。

基本概念

结果集:满足使用场景正确的路径或者URI。

约束限制

  • 转换或者判断URI类型之前必须保证传入的参数正确有效。

  • 为保证数据的准确性,在转换或者判断过程中只允许处理一个对象。

接口说明

接口的详细说明,请参考API参考

接口名称描述
FileManagement_ErrCode OH_FileUri_GetUriFromPath(const char *path, unsigned int length, char **result)通过传入的路径PATH获取到对应的URI。
FileManagement_ErrCode OH_FileUri_GetPathFromUri(const char *uri, unsigned int length, char **result)通过传入的URI获取到对应的沙箱路径PATH。
FileManagement_ErrCode OH_FileUri_GetFullDirectoryUri(const char *uri, unsigned int length, char **result)获取所在路径URI,文件获取所在路径URI,如果URI指向目录则获取当前路径URI。
bool OH_FileUri_IsValidUri(const char *uri, unsigned int length)判断传人的URI的格式是否正确。
FileManagement_ErrCode OH_FileUri_GetFileName(const char *uri, unsigned int length, char **result)通过传入的URI获取到对应的文件名称。

开发步骤

在CMake脚本中链接动态库

CMakeLists.txt中添加以下lib。

target_link_libraries(sample PUBLIC libohfileuri.so)

添加头文件

#include <filemanagement/file_uri/oh_file_uri.h>
  1. 调用OH_FileUri_GetUriFromPath接口,在接口中malloc的内存需要在使用完后释放,因此需要free对应的内存。示例代码如下所示:

     #include <cstring>
    
     void OH_FileUri_GetUriFromPathExample() {
         char *path = "/data/storage/el2/base/files/test.txt";
         unsigned int length = strlen(path);
         char *uriResult = NULL;
         FileManagement_ErrCode ret = OH_FileUri_GetUriFromPath(path, length ,&uriResult); 
         if (ret == 0 && uriResult !=NULL) {
             printf("pathUri=%s", uriResult); // 应用a获取到的URI为:file://com.example.demo/data/storage/el2/base/files/test.txt
         }
         if (uriResult != NULL) {
             free(uriResult);
         }
     }    
  2. 调用OH_FileUri_GetPathFromUri通过URi转成对应的PATH,在接口中malloc的内存需要在使用完后释放,因此需要free对应的内存。示例代码如下所示:

     #include <cstring>
    
     void OH_FileUri_GetPathFromUriExample() {
         char *uri = "file://com.example.demo/data/storage/el2/base/files/test.txt";
         unsigned int length = strlen(uri);
         char *pathResult = NULL;
         FileManagement_ErrCode ret = OH_FileUri_GetPathFromUri(uri, length, &pathResult);
         if (ret == 0 && pathResult != NULL) {
             printf("pathResult=%s", pathResult); // PathResult值为:/data/storage/el2/base/files/test.txt
         }
         if (pathResult != NULL) {
             free(pathResult);
         }
     }
  3. 调用OH_FileUri_GetFullDirectoryUri获取URI所在路径的URI,在接口中malloc的内存需要在使用完后释放,因此需要free对应的内存。示例代码如下所示:

     #include <cstring>
     
     void OH_FileUri_GetFullDirectoryUriExample() {
         char *uri = "file://com.example.demo/data/storage/el2/base/files/test.txt";
         unsigned int length = strlen(uri);
         char *uriResult = NULL;
         FileManagement_ErrCode ret = OH_FileUri_GetFullDirectoryUri(uri, length, &uriResult);
         if (ret == 0 && uriResult != NULL) {
             printf("pathUri=%s",uriResult);//URI所在路径的URI:file://com.example.demo/data/storage/el2/base/files/
         }
         if (uriResult != NULL) {
             free(uriResult);
         }
     }
  4. 可以调用OH_FileUri_IsValidUri接口进行URI格式验证。 示例代码如下所示:

     #include <cstring>
     
     void OH_FileUri_IsValidUriExample() {
         char *uri = "file://com.example.demo/data/storage/el2/base/files/test.txt";
         unsigned int length = strlen(uri);
         bool falgs = OH_FileUri_IsValidUri(uri, length);
         printf("The URI is valid? falgs=%d", falgs);
     }
  5. 调用OH_FileUri_GetFileName获取URI中的文件名称,在接口中malloc的内存需要在使用完后释放,因此需要free对应的内存。示例代码如下所示:

     #include <cstring>
     
     void OH_FileUri_GetFileNameExample() {
         char *uri = "file://com.example.demo/data/storage/el2/base/files/test.txt";
         unsigned int length = strlen(uri);
         char *uriResult = NULL;
         FileManagement_ErrCode ret = OH_FileUri_GetFileName(uri, length, &uriResult);
         if (ret == 0 && uriResult != NULL) {
             printf("pathUri=%s",uriResult);//获取到URI中的文件名:test.txt
         }
         if (uriResult != NULL) {
             free(uriResult);
         }
     }

标签:进阶,OH,URI,C++,uri,char,HarmonyOS,uriResult,FileUri
From: https://blog.csdn.net/m0_67143533/article/details/143571747

相关文章

  • C++工厂模式全解析:从简单工厂到抽象工厂的进阶之路
    在软件设计中,工厂模式(FactoryPattern)是一类创建型设计模式,用于将对象的创建过程和使用过程解耦。这种设计模式在面向对象编程中非常常见,特别是在构建复杂系统时,工厂模式可以使代码更加灵活、模块化、易于扩展。工厂模式的主要类型包括:简单工厂模式(SimpleFactory)工厂方法模......
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
    1.问题描述:人脸活体检测页面会有声音提示,如何控制声音开关?解决方案:活体检测暂无声音控制开关,但可通过其他能力控制系统音量,从而控制音量。活体检测页面固定音频流设置的是8(无障碍),获取的是系统无障碍的音量大小。设置无障碍音量示例:importaudiofrom'@ohos.multimedia.audi......
  • 鸿蒙开发进阶(HarmonyOS)时域可分层视频编码
     鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)基础概......
  • 鸿蒙开发进阶(OpenHarmony)扩展组件-系统调用
    鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)基本概念......
  • C++中的各种锁p8
    在多线程开发中,经常会遇到数据同步,很多情况下用锁都是一个很好的选择。C++中常用的锁主要有下面几种:互斥锁(std::mutex)这是最基本的一种锁。它用于保护共享资源,在任意时刻,最多只有一个线程可以获取该锁,从而访问被保护的资源。当一个线程获取了互斥锁后,其他试图获取该锁的线程会......
  • 【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)
    文章目录前言1.auto关键字(C++11)1.1为什么要有auto关键字1.2auto关键字的使用方式1.3auto的使用细则1.4auto不能推导的场景2.基于范围的for循环(C++11)2.1范围for的语法2.2范围for的使用条件3.指针空值nullptr(C++11)3.1为什么会有nullptr这个关键字?前言本......
  • 【C/C++】野指针概念以及避免方式
    C语言中的野指针详解野指针(WildPointer)是指向未定义或非法内存位置的指针。本博客讲解野指针的概念、产生原因、危害以及如何避免野指针的问题。1.什么是野指针野指针指的是未初始化或已经失效的指针变量。这些指针指向的内存位置不再有效,可能被系统回收或被其他变量使......
  • CSP/信奥赛C++完整学习规划(价值2万的csp-j完整课程体系)
    CSP/信奥赛C++课程完整学习视频一站式掌握信奥赛知识冲刺信奥赛拿奖课程购买后永久学习,不受限制!阶段一:《信奥赛C++语法基础》课程目标:轻松入门C++语法课程链接:https://edu.csdn.net/course/detail/39557阶段二:《信奥赛C++语法进阶》课程目标:快速进阶C++语法......
  • 华为大气啊!HarmonyOS NEXT公测发福利~这个可以有
    HarmonyOSNEXT火热公测中,首批100万名公测用户速来领取多重权益!华为视频、华为阅读、音乐、主题、云空间、天际通等应用会员一应俱全;还有爱奇艺、哔哩哔哩、芒果TV、WPS、喜马拉雅、优酷六大应用的会员季卡6选2,这一波不得不说华为大气!......
  • Python:用 turtle 库打造趣味动画 —— 基础示例与进阶拓展
    以下是一个使用Python的matplotlib库实现的简单动画程序示例,展示了一个正弦波动态变化的效果,标题为《Python与Matplotlib:动态正弦波动画展示》。收起python复制importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimation#创......