2016-05-02 23 views
3

tarFileNames包含需要導入的所有文件的名稱。某些文件可能不存在。我怎麼能跳過不存在這樣的文件,循環就不會與此錯誤停止:如果文件不存在,如何從導入中跳過文件?

Error using imread (line 349) 
File "C:\Users\xyz.tif" does not exist. 

代碼:

for m = 1:length(tarFileNames) 
    tarConus = imread(tarFileNames{m}); 
    tarConus(end,:) = []; % Dropping last col and row from each page 
    tarConus(:,end) = []; 
    tarAccum = plus(tarConus(select),tarAccum); 
end 

回答

3

您可以檢查使用exist文件的存在。請務必指定第二個輸入參數,它指定您只想按該名稱查找文件。

%// Determine all of the files that don't exist. 
doesExist = cellfun(@(x)exist(x, 'file') == 2, tarFileNames); 

%// File which do not exist 
invalidNames = tarFileNames(~doesExist); 

%// File which do exist 
validNames = tarFileNames(doesExist); 

%// Only loop through the ones that do exist 
for m = 1:numel(validNames)  
    tarConus = imread(validNames{m}); 
    tarConus(end,:) = []; % Dropping last col and row from each page 
    tarConus(:,end) = []; 
    tarAccum = plus(tarConus(select),tarAccum); 
end 
+0

謝謝!我猜測這比下面的解決方案在計算上更有效率(這對我來說很重要,因爲大數據集)? – maximusdooku

+0

另外,我可以獲得已跳過的文件列表嗎? – maximusdooku

+0

@maximusdooku更新。 – Suever

0

if exist(Name, 'file')回報2文件是否存在,或者如果7存在一個文件夾。

對不起,目前沒有matlab可用於爲您編寫和測試完整的代碼。

我想這應該是類似的東西:

for m = 1:length(tarFileNames) 
    if exists(tarFileNames{m}, 'file') 
     tarConus = imread(tarFileNames{m}); 
     tarConus(end,:) = []; % Dropping last col and row from each page 
     tarConus(:,end) = []; 
     tarAccum = plus(tarConus(select),tarAccum); 
    else 
    end 
end 
2

exist()可以檢查文件是否存在。這應該這樣做:

for m = 1:length(tarFileNames) 
    if exist(tarFileNames{m}, 'file') 
     tarConus = imread(tarFileNames{m}); 
     tarConus(end,:) = []; % Dropping last col and row from each page 
     tarConus(:,end) = []; 
     tarAccum = plus(tarConus(select),tarAccum); 
    end 
end 
+0

謝謝!我如何獲得已跳過的文件列表? – maximusdooku

+0

您可以使用'else'語句(在第一個'end'之前)將當前的'tarFileNames {m}'字符串存儲到單元格中,或類似的東西。 –

相關問題