FTP 以一致但无法解释的间隔停止工作? (Matlab)

FTP stops working at consistent, but unexplained intervals? (Matlab)

问题

我正在使用下面的(简化)代码来获取有关我在 box.com.

上的回购的信息

脚本应该:

  1. 通过FTP
  2. 访问我的远程仓库
  3. 获取存储库中所有目录的列表
  4. 遍历列表中的每个目录,在每次迭代中它: 3a) 进入目录并获取有关那里文件的一些信息 3b) 将信息存储在数组中 3c) 使用“../”
  5. 回到根

我在我的存储库(134 个目录中的 70 个)中找到了大约一半的目录:

ftpobj = ftp("ftp.box.com","myUname","myPassword","TLSMode","strict");

% Get dir list
dirList = dir(ftpobj);
numDirs =  size(dirList,1);

% Setup out Array 
clearvars outArray
outArray = ["directory" "numFiles"]; 

for i = 1:numDirs
    % Select and Move to subfolder
    folder = dirList(i,1).name; 
    cd(ftpobj, folder);
    
    % Get a filelist for dir
    files = dir(ftpobj);
    numFiles = size(files,1);
 
    % Determine Output and add to OutArray
    outLine = [folder numFiles];
    outArray = [outArray; outLine];

    disp(i + " of " + numDirs + " done");
    cd(ftpobj, "../"); % Move back to Root
end 

但是它在 cd(ftpobj,"../"); 行的一半左右掉线了,说:

"ftp://ftp.box.com//2021-11-04/../" is nonexistent or not a directory.

我试过:

如果我在终端中再次 运行 cd(ftpobj,"../"); 命令,它工作正常。我可以手动增加 i 并再次逐步进行,没问题 - 只是不在循环中。

我尝试在整个循环中添加一个 try catch,但是当它超过 2021-11-04(目录 71)时它仍然停止工作!

我尝试在跳过问题目录 (i==71) 的代码中添加 if 语句,但它只是在下一个目录 (dir 72) 上出错。然后我尝试将 for 语句更改为 for i = 72:numDirs,而不清除工作区,它再次跳闸。

可能的解决方案? 我完全清除了工作区并再次 运行 整个代码但使用 for i = 72:numDirs 并且它完美地进行到最后。所以我想我可以 运行 将这个循环分成两半,但这看起来很老套?

会不会是带宽限制/结构限制之类的?不过我还没有找到任何相关信息?

我设法找到了一个合理的解决方法。我所做的就是通过将以下内容放入我的循环中,每 30 个查询重置一次 ftpobj。到目前为止,它已经通过 4 个 repos 并分析了 700 多个目录,所以虽然有点奇怪(并且可能更慢?)我认为这是一个可行的解决方案!

if mod(i,30) == 0 % reset the ftp every 30
            disp("resetting FTP object at "+ i);
            ftpobj = ftp("ftp.box.com","myUname","myPassword","TLSMode","strict");
end