DELPHI开发APP回忆录二安卓与pc端路径的选择
| 路径方法 | Win | Android |
|---|---|---|
| GetHomePath | C:\Users\ggggcexx\AppData\Roaming | /data/user/0/com.stella.scan/files/ |
| GetDocumentsPath | C:\Users\ggggcexx\Documents | /data/user/0/com.embarcadero.FirstAidExpert_FMX_D11/files |
| GetSharedDocumentsPath | C:\Users\Public\Documents | /storage/emulated/0/Documents |
| GetLibraryPath | C:\MyFiles\OrangeUIProduct\项目名称\APP\Win32\Debug\ | /data/app/com.embarcadero.FirstAidExpert_FMX_D11-wlgPkLmXf6nZlWnaSyFsnw==/lib/arm |
| GetCachePath | C:\Users\ggggcexx\AppData\Local | /data/user/0/com.embarcadero.FirstAidExpert_FMX_D11/cache |
| GetPublicPath | C:\ProgramData | /storage/emulated/0/Android/data/com.embarcadero.FirstAidExpert_FMX_D11/files |
| GetPicturesPath | C:\Users\ggggcexx\Pictures | /storage/emulated/0/Android/data/com.embarcadero.FirstAidExpert_FMX_D11/files/Pictures |
| GetSharedPicturesPath | C:\Users\Public\Pictures | /storage/emulated/0/Pictures |
| GetCameraPath | C:\Users\ggggcexx\Pictures | /storage/emulated/0/Android/data/com.embarcadero.FirstAidExpert_FMX_D11/files/DCIM |
| GetSharedCameraPath | C:\Users\Public\Pictures | /storage/emulated/0/DCIM |
| GetDownloadsPath | C:\Users\ggggcexx\Downloads | /storage/emulated/0/Android/data/com.embarcadero.FirstAidExpert_FMX_D11/files/Download |
| GetSharedDownloadsPath | C:\Users\Public\Downloads | /storage/emulated/0/Download |
| Delphi 跨平台路径操作 TPath | ||
| Delphi 有一个 System.IOUtils 单元, | ||
| 里面有一个 TPath,是一个跨平台的路径操作结构体, | ||
| 里面有获取常用路径的静态方法(不需要创建直接可以调用的方法)。 |
GetDocumentsPath 就是应用的文档目录(私有存储空间),
如果你要保存文件,一般将文件保存在文档目录。
在 Android 下,GetHomePath 和 GetDocumentsPath 都指向同一个目录
GetCachePath 是缓存目录,可以保存比如临时下载的网络图片,
手机上的清除应用缓存就是清理的这个目录。
还有一些带 Shared 的目录,
GetSharedDocumentsPath、GetSharedPicturesPath、GetSharedCameraPath、GetSharedDownloadsPath,
这些则是可以与其它应用共享的目录,都保存在外部存储空间中,
其他应用可以访问到它们。
路径分隔符
需要注意的是,安卓系统下面路径分隔符和 Windows 下不一样,
Windows 下是\,Anroid 下面是/,
那么我们平时写代码要拼路径的时候,该怎么办呢?
Delphi 已经帮我们考虑好了,
大家统一用常量 PathDelim 即可。
比如你要将当前登录用户的账号密码保存到 Config.ini 中,
那么你就可以通过 TPath.GetDocumentsPath+PathDelim+’Config.ini’来访问它。
使用方法简单
UserPath := System.IOUtils.TPATH.GetDocumentsPath + PathDelim + 'UserData.json';GroupPath := System.IOUtils.TPATH.GetDocumentsPath + PathDelim + 'GroupTable.json';PathDelim 代表PC与安卓的动态斜杠因为两个客户端文件路径的斜杠是不一致的后面就加上报错的文件名
相关文章:
DELPHI开发APP回忆录二安卓与pc端路径的选择
路径方法WinAndroidGetHomePathC:\Users\ggggcexx\AppData\Roaming/data/user/0/com.stella.scan/files/GetDocumentsPathC:\Users\ggggcexx\Documents/data/user/0/com.embarcadero.FirstAidExpert_FMX_D11/filesGetSharedDocumentsPathC:\Users\Public\Documents/storage/emu…...
井盖位移传感器怎么监测井盖安全
井盖在城市基础设施建设中扮演着不可或缺的角色,虽然看似并不起眼但确实是城市规划中一个重要的组成部分。在城市规划建设之初都需要首先考虑排水系统的设计,而井盖作为排水系统的一个重要组成部分,一旦出现问题便会造成交通中断或者环境受影…...
从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合
🎏:你只管努力,剩下的交给时间 🏠 :小破站 "从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合 前言准备工作编写docker-compose.yml文件为什么使用本机ip为什么skywa…...
设计模式——状态模式介绍
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。 状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。 下面是一个例…...
Java 多线程之 CAS(Compare and Set),实现无锁优化,自旋锁/乐观锁
文章目录 一、概述二、JDK 的 Unsafe 类三、ABA 问题 一、概述 CAS(Compare and Swap)是一种并发编程中的原子操作(synchronized 也使用了 CAS),用于实现多线程环境下的同步和数据共享。CAS提供了一种高效的并发控制机…...
python之pyqt专栏1-环境搭建
#python pyqt# python:3.11.6 pycharm:PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载:Python Releases for Windows | Python.org pycharm社区版安装 官网地址:Download PyCharm: Python IDE for Professional…...
Spring Cloud LoadBalancer 简单介绍与实战
前言 本文为SpringCloud的学习笔记,如有错误,希望各位高手能指出,主要介绍SpringCloudLoadBalancer的基本概念和实战 文章目录 前言什么是LoadBalancer负载均衡分类服务端负载均衡客户端负载均衡服务端负载均衡和客户端负载均衡的优缺点 常见…...
私域流量解决方案分享
...
Scala---WordCount
一、创建Maven项目导入pom.xml文件 安装Maven仓库管理工具,版本要求是3.2版本以上。新建Maven项目,配置pom.xml。导入必要的包。 二、Spark-Scala版本的WordCount 1.val conf new SparkConf() 2.conf.setMaster("local") 3.conf.setAppNam…...
GTC2023全球流量大会蓄势待发,菊风在7B57展位等你!
第六届 GTC 全球流量大会(以下简称 GTC2023)将于12月5日- 6日,在深圳福田会展中心7&8号馆举办。 据悉,本届大会将是历届以来规模最大、参与人数最多、跨境出海资源最丰富的一次行业盛会。7、8 号馆共 15000 平方米&am…...
喜讯!云起无垠成为国家信息安全漏洞库(CNNVD)技术支撑单位
近日,云起无垠凭借其在漏洞挖掘、漏洞检测以及漏洞修复等领域的卓越表现,荣获“国家信息安全漏洞库(CNNVD)技术支撑单位等级证书(三级)”,正式成为CNNVD技术支撑单位。 中国国家信息安全漏洞库&…...
cc linux用root用户执行chmod 777 -R ./提示 Operation not permitted怎么办?
如果你作为 root 用户执行 chmod 777 -R ./ 命令时收到 “Operation not permitted” 错误,可能有几个原因: 不可更改 (Immutable) 文件属性: 文件可能被设置为不可更改。即使是 root 用户也不能修改这些文件的权限。使用 lsattr 命令查看文件…...
scrapy框架流程
1、Scrapy从Spider子类中提取start_url,然后构造为request请求对象 2、将request请求对象传递给爬虫中间件 3、将request请求对象传递给Scrapy引擎(核心代码) 4、将request请求对象传递给调度器(它负责对多个request安排,好比交…...
802.11 帧的Reason Code 位和Status Code 位
Reason Code 位 当对方不适合加入网络时,工作站会送出 Disassociation(解除连接)或 Deauthentication(解除身份认证)帧作为应答。这些帧当中包含一个长度 16bit 的 Reason Code(原因代码)位&am…...
骨传导能保护听力吗?为什么说骨传导耳机可以保护听力?
由于骨传导耳机的特殊传声方式,是可以保护听力的。 首先了解下骨传导耳机的传声方式是什么: 骨传导耳机是通过骨骼震动传导技术,将声音传至颅骨,然后通过颅骨传导到内耳,直接刺激听觉神经,使人感知到声音…...
【iOS】实现评论区展开效果
文章目录 前言实现行高自适应实现评论展开效果解决cell中的buttom的复用问题 前言 在知乎日报的评论区中,用到了Masonry行高自适应来实现评论的展开,这里设计许多控件的约束问题,当时困扰了笔者许久,特此撰写博客记录 实现行高自…...
POE交换机——电源解决方案-升压控制器\降压控制器\中高压降压转换器
PoE是一种有线以太网供电技术,使用于数据传输的网线同时具备直流供电的能力,PoE供电具有可靠、连接简捷、标准统一的优势。越来越多的工业物联网设备开始采用PoE供电, 如IP电话、网络视频监控以及无线以太网设备等。 PoE交换机是一种用于提供…...
[C/C++]数据结构 循环队列
前言: 队列是一种具有先进先出特性的结构,但是当数据出队列以后,前面的空间就无法再次利用了,循环队列就可以解决这个问题 一:概念及结构: 1.循环队列概念 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队…...
Cache学习(2):Cache结构 命中与缺失 多级Cache结构 直接映射缓存
1 Cache名词解释 命中(hit): CPU要访问的数据在Cache中有缓存缺失(miss): CPU要访问的数据在Cache中没有缓存Cache Size:Cache的大小,代表Cache可以缓存最大数据的大小Cache Line&a…...
vue前端前端页面权限验证方式
在Vue应用中使用Vuex(Vue的状态管理库)来存储用户组(user group)和角色(roles)信息是一种合理的做法,特别是在涉及到权限管理和用户身份的情况下。Vuex提供了一个集中式的状态管理方案ÿ…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
