在易语言中,要获取一个文件夹的名称,通常有两种常见的需求:
- 获取一个完整路径(如
C:\Users\Public\Documents
)中的最后一部分(即Documents
)。 - 获取一个文件或文件夹句柄(由
打开目录()
等命令返回)所对应的名称。
下面我将分别针对这两种情况,提供详细的代码示例和解释。
从完整路径中提取文件夹名称(最常用)
这是最常见的需求,你有一个路径字符串 D:\Projects\MyApp\Source
,你想得到 Source
。
易语言本身没有内置的、像其他语言那样的 Path.GetFileName()
或 Split()
函数,但我们可以通过字符串操作轻松实现。
示例代码:
.版本 2 .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .局部变量 源路径, 文本型 .局部变量 文件夹名称, 文本型 ' --- 示例1:从路径中提取文件夹名称 --- 源路径 = “D:\Projects\MyApp\Source” ' 这是一个示例路径 ' 方法:查找最后一个反斜杠“\”的位置,然后取它后面的所有内容。 ' 1. 使用“取文本中间”命令 ' 2. 使用“分割文本”命令(更推荐,代码更简洁) ' .方法 A: 使用 “取文本中间” 命令 .如果真 (寻找文本 (源路径, “\”, , 假) > 0) ' 取文本中间 (欲被取出的文本, 起始位置, 取出长度) ' 起始位置 = 最后一个反斜杠的位置 + 1 ' 取出长度 = 字符数 (源路径) - 最后一个反斜杠的位置 文件夹名称 = 取文本中间 (源路径, 寻找文本 (源路径, “\”, , 假) + 1, 字符数 (源路径) - 寻找文本 (源路径, “\”, , 假)) .否则 文件夹名称 = “路径无效或无文件夹名” .如果真结束 输出调试文本 (“方法A - 文件夹名称是: ” + 文件夹名称) ' .方法 B: 使用 “分割文本” 命令 (更推荐) .如果真 (寻找文本 (源路径, “\”, , 假) > 0) ' 将路径按“\”分割成数组 .局部变量 路径分段, 文本型, , "0" 路径分段 = 分割文本 (源路径, “\”, ) ' 数组的最后一个元素就是文件夹名 文件夹名称 = 路径分段 [取数组成员数 (路径分段)] .否则 文件夹名称 = “路径无效或无文件夹名” .如果真结束 输出调试文本 (“方法B - 文件夹名称是: ” + 文件夹名称) ' --- 示例2:处理路径末尾带“\”的情况 --- 源路径 = “C:\Windows\System\” ' 注意末尾的“\” ' 使用方法B可以很好地处理这种情况 路径分段 = 分割文本 (源路径, “\”, ) .计次循环首 (取数组成员数 (路径分段), i) .如果真 (路径分段 [i] ≠ “”) 文件夹名称 = 路径分段 [i] 跳出循环 () ' 找到最后一个非空元素就退出 .如果真结束 .计次循环尾 () 输出调试文本 (“处理带\的路径 - 文件夹名称是: ” + 文件夹名称)
代码解释:
-
方法A (取文本中间):
寻找文本(源路径, “\”, , 假)
:从后向前查找最后一个反斜杠“\”的位置。取文本中间(...)
:根据找到的位置,取出反斜杠之后的所有字符。
- 优点:只使用一个命令。
- 缺点:代码稍显复杂,需要计算长度。
-
方法B (分割文本):
分割文本(源路径, “\”, )
:将整个路径字符串,以“\”为分隔符,拆分成一个文本数组。"D:\A\B"
会被拆分成{"D:", "A", "B"}
。取数组成员数(路径分段)
:获取这个数组有多少个元素。路径分段 [取数组成员数 (路径分段)]
:直接访问数组的最后一个元素,它就是我们要的文件夹名。
- 优点:代码逻辑清晰,易于理解和维护,是处理此类问题的推荐方法。
- 缺点:会创建一个临时数组,但对于性能影响微乎其微。
从文件夹句柄获取名称
这种方法适用于你已经通过 打开目录()
等命令操作了文件夹,并获得了其句柄,在易语言中,直接通过句柄获取文件夹名称的功能非常有限,通常需要结合 Windows API 来实现。
这个场景比较少见,因为如果你已经有句柄了,通常你是在遍历目录,而不是想知道这个句柄本身叫什么名。
这是一个高级用法,通常不推荐初学者使用。
示例代码 (使用 Windows API):
.版本 2 .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .局部变量 目录句柄, 整数型 .局部变量 文件夹名称, 文本型 ' 需要先声明用到的 Windows API 函数 .声明 GetFinalPathNameByHandleA (整数型 hFile, 文本型 lpszFilePath, 整数型 cchFilePath, 整数_t dwFlags) ' 1. 首先打开一个目录,获取句柄 目录句柄 = 打开目录 (“C:\Windows\System32”, ) ' 假设成功,句柄不为0 .(目录句柄 ≠ 0) ' 2. 准备一个足够大的缓冲区来存放完整路径 .局部变量 完整路径, 文本型 完整路径 = 取空白文本 (260) ' MAX_PATH 通常是 260 ' 3. 调用 API 获取句柄对应的完整路径 ' V0x0000000000000008 (FILE_NAME_NORMALIZED) 表示获取规范化的路径 .如果真 (GetFinalPathNameByHandleA (目录句柄, 完整路径, 260, 8) ≠ 0) ' 4. 我们得到了完整路径,就可以用“方法一”来提取文件夹名了 .局部变量 路径分段, 文本型, , "0" 路径分段 = 分割文本 (完整路径, “\”, ) 文件夹名称 = 路径分段 [取数组成员数 (路径分段)] 输出调试文本 (“通过句柄获取的文件夹名称是: ” + 文件夹名称) .否则 输出调试文本 (“API调用失败”) .如果真结束 ' 5. 记得关闭句柄! 关闭目录 (目录句柄) .否则 输出调试文本 (“打开目录失败”) .如果结束
代码解释:
- 声明API:
GetFinalPathNameByHandleA
是一个 Windows API 函数,可以根据一个打开的文件或文件夹句柄,获取其完整的、规范化的路径。 - 打开目录: 使用易语言的
打开目录()
命令获取System32
文件夹的句柄。 - 调用API: 将句柄和准备好的缓冲区传递给 API 函数。
- 处理结果: API 返回后,
完整路径
变量里就存放了C:\Windows\System32
这样的字符串。 - 提取名称: 再次使用方法一中的“分割文本”技巧,从完整路径中提取出
System32
。 - 关闭句柄: 使用
关闭目录()
释放系统资源,这一点非常重要。
总结与建议
需求场景 | 推荐方法 | 优点 | 缺点 |
---|---|---|---|
我有一个路径字符串,想得到文件夹名 | 分割文本 | 代码简单、直观、易读 | 无明显缺点 |
我有一个文件夹句柄,想得到文件夹名 | Windows API | 可以解决特定问题 | 代码复杂,需要了解API,容易出错,需要手动管理资源 |
对于 99% 的情况,你遇到的都会是第一种需求,因此请直接使用**方法一(
关于“易语言怎么取文件夹名称?”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!