“文件与目录操作” 处理包含零宽空格的文件时出错

BUG反馈 · 3525 次浏览
RuiDSaaCC 创建于 7天17小时前

我尝试使用 “文件与目录操作” 处理一个包括文件名有零宽空格的文件,提示 “系统找不到文件” “源路径不存在” 。

拿 CMD 处理是正常的:

 


回复内容
CL 7天7小时前
#1

零宽字符会被自动清理掉,为了避免复制到的路径里包含零宽字符造成的错误。

RuiDSaaCC 回复 CL 6天20小时前 :
那有没有可能提供开关?不然建议在下边加上注释,标明会对输入值进行哪些预处理。
RuiDSaaCC 最后更新于 6天20小时前
RuiDSaaCC 回复 CL 6天20小时前 :

包括我一开始以为是没有用双引号包裹路径,结果 没有零宽字符 正常的情况下 加上之后反而会报错。

RuiDSaaCC 最后更新于 6天20小时前
CL 回复 RuiDSaaCC 6天5小时前 :

通常不会故意在文件名里增加零宽字符,所以判断路径里有的话都是意外需要去除的。 

你那边具体是什么场景需要在文件名里保留零宽字符呢?

RuiDSaaCC 回复 CL 5天14小时前 :

本来是打算通过零宽空格控制动作流程(检查文件名内零宽空格位置以及数量),而且可以拿来做跨格式标记。

RuiDSaaCC 回复 CL 5天13小时前 :

而且我觉得如果只是为了避免复制到的路径里包含零宽字符,其实在输入检查那里提示就行了。或者在强制用特殊符号表示零宽字符。但最简单的还是加个 “移除路径内零宽字符” 然后默认勾选。

RuiDSaaCC 最后更新于 5天13小时前
RuiDSaaCC 回复 CL 5天13小时前 :

再退一步讲,一般会发生 “复制到的路径里包含零宽字符” 这种错误的地方大多是运行动作时弹出的 “用户输入” 或者 “多字段表单” ,但 “文件和目录操作” 的路径来源一般都是 “获取选择的文件(夹) / 选择特定文件” ,就算要加零宽字符过滤也应该是 “用户输入” 之后, “文件和目录操作” 之前就处理了。

CL 回复 RuiDSaaCC 4天22小时前 :

不是的,很多是从文件属性对话框里复制到动作参数的,统一替换掉比较合适。 建议使用常规字符作为标记使用,零宽字符自己也可不见,怎么预期执行结果呢。

RuiDSaaCC 回复 CL 4天19小时前 :

零宽字符的目的就是为了让人看不到啊,比如我批量获取了一大批文件,然后手动调整了某个文件中的单个元数据,为了防止动作覆写该元数据,在文件名 ”]” 后面插入3个零宽空格,表示 “锁定元数据C”。我看不看得到不重要,重要的是动作别把我手动修改的元数据又给改回了批量获取值。你可以理解为这是自定义的 "属性"(锁定元数据C)。

而且我的重点是:IDE不应在未告知用户、未经用户授权下的情况下静默修改输入内容,尤其是这个修改导致的错误打印出来是看不出异常的。

你完全可以标记出该输入值包含不可见字符。但不能为了可能存在的输入错误,惩罚使用合法字符构建文件名的用户。就像我在用 "如果" 的时候,写了个 “或” 判定,结果 || 后边什么都没有,编辑器只会用红色下波浪线提示我,而不会把我 || 给删了一样。

RuiDSaaCC 回复 CL 4天19小时前 :

而且自己创建的文件名能控制,但网络下载的资源文件名里有又怎么办呢?动作小白只能看着 “D:\视频.mp4 错误,未找到该路径” 然后盯着D盘根目录下的视频文件发懵。

沉没的白鲸 回复 RuiDSaaCC 4天18小时前 :
讲道理你比较对, 用户复制错了字符应该自行承担后果。 但是站在开发者角度出现不可见字符的大多数是小白,出于好心帮他后台处理掉。 要不你换个方式吧,除了放不可见字符应该还有很多方法可以标记。 
H-D-G 回复 CL 4天16小时前 :

可能加个选项:自动去除零宽字符,然后把默认值设为True比较合适,这样既说明了内部的处理,提供了开关,也兼容了原来的动作

RuiDSaaCC 回复 沉没的白鲸 4天16小时前 :

我已经用CMD处理了,CMD可以绕过过滤

RuiDSaaCC 回复 RuiDSaaCC 4天16小时前 :


RuiDSaaCC 最后更新于 4天16小时前
RuiDSaaCC 回复 H-D-G 4天16小时前 :

我第一个回复说的就是这个

CL 回复 RuiDSaaCC 4天16小时前 :

后面等试试改成只去除路径前面的零宽字符,这个一般出现在前面。

RuiDSaaCC 回复 CL 4天5小时前 :
这样至少不影响合法路径了。不过还是建议在开发文档里提醒一下,我当时就是因为文档里没有这方面的说明才以为是bug。
CL 回复 RuiDSaaCC 4天3小时前 :
回复主贴