問題
我正在使用下面的(簡化的)代碼來獲取有關我在 box.com 上的回購的資訊。
腳本應該:
- 通過 FTP 訪問我的遠程倉庫
- 獲取 repo 中所有目錄的串列
- 遍歷串列中的每個目錄,在每次迭代中它: 3a) 進入目錄并獲取有關那里的檔案的一些資訊 3b) 將資訊存盤在陣列中 3c) 使用“../”回傳根目錄
我發現以下適用于我的 repo 中大約一半的目錄(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(dir 71)時它仍然停止作業!
我嘗試在if代碼中添加一條陳述句來跳過問題目錄(i==71),而它只是在下一個目錄(目錄 72)上跳閘。然后我嘗試將 for 陳述句更改為for i = 72:numDirs,而不清除作業區,但它再次跳閘。
一個可能的解決方案?
我完全清除了作業區并再次運行了整個代碼,但for i = 72:numDirs它完美地進行到了最后。所以我想我可以把這個回圈分成兩半來運行,但這似乎很hacky?
可能是帶寬限制/結構限制或其他什么?我還沒有找到任何關于它的東西?
uj5u.com熱心網友回復:
我設法找到了一個合理的解決方法。我所做的就是通過將以下內容放入我的回圈中,每 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414072.html
標籤:
