Octave 中的文件名太长

Filename too long in Octave

我目前正在用 Octave(3.8.0,Windows)编写一个小程序来解析目录结构并从该结构中的文件中检索一些数据。感兴趣的文件并不总是位于相同的一致位置,因此我必须搜索它们,为此,我广泛使用了 dir 函数。

我遇到了一个问题,我不知道如何解决。对于某些文件,我在调用 dir 函数时收到以下警告:

warning: dir: 'lstat (P:xxxProjects\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 是否支持最大 path/file 长度?我该如何解决这个问题?我无法更改目录结构或文件名的命名约定。问题目录路径的长度是 177,给我问题的文件名的长度是 84,所以总长度是 261。同一目录中的其他文件,长度是 81(所以总长度是 258),工作就好了。代码中是否有 260 个字符的最大长度?

我已将问题缩小到 dir 中对 lstatstat 的调用:

[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

以下是我打电话给 lstatstat 时得到的结果 file/directory:

>> [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

不幸的是,statlstat 都是 built-in/compiled 函数,所以我无法编辑它们。有人可以提出解决方法吗?

最大路径长度to be used on Windows is 260。您可以解决此问题,但您可能 运行 进入下一个问题。我强烈建议更改结构,因为其他八度函数和其他软件会 运行 出现类似问题。

如果您确实无法更改结构,请尝试创建符号链接以使用更短的替代结构。