FTP 以一致但无法解释的间隔停止工作? (Matlab)
FTP stops working at consistent, but unexplained intervals? (Matlab)
问题
我正在使用下面的(简化)代码来获取有关我在 box.com.
上的回购的信息
脚本应该:
- 通过FTP
访问我的远程仓库
- 获取存储库中所有目录的列表
- 遍历列表中的每个目录,在每次迭代中它:
3a) 进入目录并获取有关那里文件的一些信息
3b) 将信息存储在数组中
3c) 使用“../”
回到根
我在我的存储库(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
问题
我正在使用下面的(简化)代码来获取有关我在 box.com.
上的回购的信息脚本应该:
- 通过FTP 访问我的远程仓库
- 获取存储库中所有目录的列表
- 遍历列表中的每个目录,在每次迭代中它: 3a) 进入目录并获取有关那里文件的一些信息 3b) 将信息存储在数组中 3c) 使用“../” 回到根
我在我的存储库(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