石鑫华视觉 发表于 2024-6-22 12:21:36

VBAI保存脚本时路径和名称过长时崩溃

VBAI保存脚本时路径和名称过长时崩溃VBAI保存脚本时路径和名称过长时崩溃视频号https://www.bilibili.com/video/BV1uw4m1e7mY/VBAI保存脚本时路径和名称过长时崩溃B站使用Windows操作系统时,一般对于文件名(包含路径、扩展名等)的长度是有限制的。一般好像是限制为256个字符(从微软官方介绍来看,Win10 1607之前的版本,Max Path变量是260个字符限制https://learn.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file),但是无论255还是260个字符,都是长度限制的。在使用VBAI软件时,保存脚本时,也会遇到这个问题。如果是因为文件夹层数太多导致长度超过长度限制,那么在保存脚本时,则VBAI直接崩溃,这种情况需要注意,因为崩溃后脚本就没有了,数据会丢失,无法恢复;而如果文件夹很短,如直接在盘符下,而直接输入超长的文件名,那么是可以提示非法文件名的。但是这时就算删除一些字符后,文件名长度符合要求了,可以保存时点击Save保存时,仍然有崩溃风险,因为这里的文件名长度计算并没有考虑扩展名。这里先来验证一下Windows系统的文件名或文件夹到底可以多少字符。A~Za~z*5共260个字符这里直接简单使用A~Za~z这样的大小写字符重复5次得到260个字符,然后复制这些字符先来创建一个文件夹看看:文件夹名称直接在D盘下创建一个文件夹,然后命名。可以看到5组大小写字符的最后小写字符只有a~j,其他的则被删除了,这时的字符总长是244:文件夹名称总长244算上盘符D:\3个字符按照微软上的最大路径长度限制https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry上的内容介绍:在 Windows API ((以下段落) 中介绍的一些例外情况)中,路径的最大长度为 MAX_PATH,定义为 260 个字符。 本地路径按以下顺序构建:驱动器号、冒号、反斜杠、用反斜杠分隔的名称组件以及终止null 字符。 例如,驱动器 D 上的最大路径为“D:\some 256 个字符的路径字符串<NUL>”,其中“<NUL>”表示当前系统代码页的不可见终止 null 字符。 (此处使用的字符 <> 是为了直观明了,不能是有效路径 string 的一部分。)……使用 API 创建目录时,指定的路径不能太长,无法追加 8.3 文件名 (即目录名称不能超过 MAX_PATH 减 12) 。也就是最大路径长度是260,还要留下DOS保留的8.3文件名,最长只能是260-12=248个字符。所以上面创建的文件夹目录则是244+3+1=248个字符。这时的文件夹长度总共有248个字符了。那么保存的VBAI脚本,则最长只能使用12个字符,.vbai扩展名去掉5个字符,这时最多只能7个字符的脚本文件名。我们来验证一下:仅输入7个长度的文件名保存到限长的文件夹中可以正常保存另存为8个长度的文件名8个的文件名仍然可以保存8个的文件名仍然可以保存,这时理论上应该是244+3+8+5+1=261个字符了,为什么还可以保存呢?这个系统只是WIN7。应该有限制的吧?那么再加长一些看看呢?15个字符的文件名仍然可以保存难道这里的文件夹和文件名是分开的判断的?260个字符的文件名直接使用260个字符的文件名时,直接提示路径过长,提示使用短名称。而且看字符最后的名称,已经被删除了一个字符,并没有z,这里应该是删除了一个结束符吧。最多只能输入259个字符。如果那按照259,再减去.vbai扩展名的5个字符,则应该最多只有254个字符。那先使用254个字符看看:254个字符仍然过长然后如果保留8.3的默认短名称,则只有242个字符。那么看看242的字符是如何处理的。先看一下243个字符时:243个字符仍然越长(这里加上结束符应该是244个?)使用242个字符时点击Save后不再弹出超长,但是VBAI直接崩溃了文件名只保留242个字符时,则可以保存了,但是保存后直接崩溃,无法保存到系统中的文件夹中。这里的VBAI应该只判断了输入的文件名长度,限制必须小于等于242个字符。但是并没有考虑文件夹的驱动器等符号。那么直接将其保存到驱动器根目录下呢?242个字符直接保存到C:\下242个字符长的文件名直接在C:\下可以保存这时的路径是“C:\ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh.vbai”,总长是251个字符:路径长度251个字符251个字符,加上一个结束符,有252个字符。将其保存到非根目录而这个242个字符长度的文件保存到非根目录时也可以保存,这时路径总长已经达到了252+4=256,还可以保存:路径总长256时可以保存而将其保存到路径总长257的文件夹12345下时则崩溃保存到12345文件夹下时崩溃所以,这里的路径总长只能是256个字符。从上面的验证判断,VBAI中会对脚本的文件名长度进行限制,最长不能超过242个字符(260-12-5-1);而Windows系统则会对文件路径进行限制,最长不超过256个字符。如果VBAI的文件名小于242个字符,而路径总长超过256个字符,则VBAI直接崩溃。
页: [1]
查看完整版本: VBAI保存脚本时路径和名称过长时崩溃

LabVIEW HALCON图像处理入门教程(24.09)
石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24