LabVIEW 取文件扩展名:vi 还是 .vi,就差一个点

本文是「CLAD 例题精讲 · 第 20 讲」系列之二。文件题写了字节、写了格式、写了路径,这一题考一个最小的函数:Get File Extension。四个选项排两排,就为一个点的有无。

01 题目

NI Daily CLAD 2017-01-31。路径常量是

C:\Users\Tester\Documents\The Daily CLAD\Example1.vi

程序框图把这个路径拆开处理:取扩展名、取不含扩展名的文件名,Bundle 成一个簇(Cluster Out),簇里两个元素:lowercase file extension (小写扩展名)和 filename without extension。

问:Cluster Out 的内容是什么?

  • a) vi / Example1
  • b) .vi / Example1
  • c) vi / Example1.
  • d) .vi / Example1.

题面:路径 → 取扩展名 → Bundle(NI Daily CLAD 2017-01-31)

四个候选答案:点的有无排出两排

02 答案

A :扩展名是 vi ,文件名是 Example1------两边都不带点。

03 为什么

这道题考的就是 Get File Extension 这类函数的接口约定:

  • Get File Extension 返回的扩展名不带点。扩展名是 "vi",不是 ".vi"。点只是文件名里的分隔符,不是扩展名的一部分;
  • "不含扩展名的文件名"同样不带点。Example1.vi 去掉扩展名之后是 Example1,那个点跟着扩展名一起被摘掉,不会留个尾巴。

对齐四个选项,正好两两配对:

  • b、d 错在扩展名带了点------把点当成了扩展名的一部分;
  • c、d 错在文件名留了尾点------以为摘扩展名只摘字母不摘点;
  • 只有 a) 两边都干净,是函数的真实约定。

出题人还留了一个追问:如果路径是 C:\Users\Tester\Docu.ments\The Daily CLAD\Example1.vi ,目录名里带个点(Docu.ments),Get File Extension 还聪明吗?答案是:聪明。它只在文件名部分找点,目录里的点不影响结果,扩展名照样是 vi。这一点工程里值得记住,因为带点的目录名真不少见。

04 容易栽的坑

坑一:拿 ".vi" 去做字符串比较。 判断文件类型时写了 == ".vi",结果永远不成立------函数给的是 "vi"。比较前先想清楚接口给的是哪种形式。

坑二:以为目录里的点会被当成扩展名起点。 Docu.ments 这种目录名不会骗到它,扩展名永远从最后一个路径分隔符之后的部分找。

坑三:没有扩展名的文件。 路径指向一个不带点的文件时,扩展名返回空字符串------代码里要按空串处理,而不是默认总有扩展名。

05 工程里怎么用

按扩展名分流文件处理。 数据目录里 .csv、.tdms、.txt 混放,用 Get File Extension 取小写扩展名后走 Case 结构分流,比在文件名里搜子串稳得多。

改文件名先拆再装。 生成"原名_时间戳"这类新文件名时,先 Strip Path 拿文件名、Get File Extension 拿扩展名,中间拼前缀,最后 Build Path 装回去------不要在完整路径字符串上做截断,目录里一个点就能让你截错位置。

小写化再比较。 函数名里那个 lowercase 不是白写的:.VI、.Vi、.vi 在 Windows 文件系统里是同一个文件,扩展名先转小写再比较,才不会漏。

一句话总结:Get File Extension 给的是不带点的扩展名,去扩展名的文件名也不留点------两边干净,是约定不是巧合。

相关推荐
LabVIEW开发1 小时前
LabVIEW String to Path:斜杠不认账,全变问号
clad·labview例题·labview基础
LabVIEW开发1 天前
LabVIEW 写文本文件:数组一进去,文件就大一圈
labview·clad·labview例题·labview基础