我目前正在Octave(3.8.0,在Windows上)编写一个小程序来解析目录结构并从该结构中的文件中检索一些数据。感兴趣的文件并不总是在同一个位置,所以我必须搜索它们,为此,我广泛使用dir
函数。
我遇到了一个问题,我不知道如何解决这个问题。对于某些文件,调用dir函数时会收到以下警告:
warning: dir: 'lstat (P:\9xxxProjects\blabla\blabla\blabla\blabla\blabla\blabla\blabla\long_filename)' failed: No such file or directory
,dir
结构输出中的结果元素是:
>> test.name
ans = .
ans = ..
ans = [](0x0)
ans = [](0x0)
ans = [](0x0)
ans = [](0x0)
ans = [](0x0)
这使我的代码错误。
现在,我在基础C:\
驱动器(C:\Test
)中创建了一个测试目录,复制了文件,并且没有更改任何其他内容(即保持文件名保持不变),运行相同码。它运行得很好,dir
没问题。
dir
是否支持最大路径/文件长度?我该如何解决这个问题?我无法更改目录结构或文件名的命名约定。问题目录路径的长度是177,给我问题的文件名的长度是84,所以组合长度为261.同一目录中的其他文件,长度为81(组合长度为258),工作得很好。代码中某处的最大长度是260个字符吗?
我已将问题范围缩小到lstat
中对stat
和dir
的调用:
[st, err, msg] = lstat (fn);
if (err < 0)
warning ("dir: 'lstat (%s)' failed: %s", fn, msg);
else
## If we are looking at a link that points to something,
## return info about the target of the link, otherwise, return
## info about the link itself.
if (S_ISLNK (st.mode))
[xst, err, msg] = stat (fn);
if (! err)
st = xst;
endif
endif
这是我用问题文件/目录拨打lstat
和stat
时得到的结果:
>> [st, err, msg] = lstat(fullfile(problem_dir,file_name_test))
st = [](0x0)
err = -1
msg = No such file or directory
>> [xst, err, msg] = stat(fullfile(problem_dir,file_name_test))
xst = [](0x0)
err = -1
msg = Filename too long
不幸的是,stat
和lstat
都是内置/编译功能,所以我无法编辑它们。任何人都可以建议一个解决方法吗?
答案 0 :(得分:3)
最大路径长度to be used on Windows is 260。您可以解决此问题,但您可能会遇到下一个问题。我强烈建议改变结构,因为其他八度功能和其他软件会遇到类似的问题。
如果你真的无法改变结构,可以尝试创建符号链接以获得更短的结构。