循环遍历非隐藏文件matlab

时间:2018-02-02 15:38:42

标签: matlab

我试图遍历dir中的非隐藏文件并将它们添加到单元格中但由于某种原因它仍然保留了隐藏文件的索引。

png_dir_path = 25

中的非隐藏文件数
listing = dir(png_dirpath);
ecell = {};
for i=1:length(listing)
    name = listing(i).name
    if ~strncmp(name, '.', 1)   % No files starting with '.'
        disp(listing(i).name)
        ecell{i} = fullfile(png_dirpath,listing(i).name);
    end
end

当我运行上面的内容时,我得到一个大小为1x28的ecell,但是disp()只返回隐藏的文件名。为什么在向单元格添加文件名时,它还会添加'.''..''.DS_Store'? 谢谢!!

png_dirpath

的内容
MBP:cartoon_png$ ls
car1.png    car12.png   car15.png   car18.png   car20.png   car23.png   car3.png    car6.png    car9.png
car10.png   car13.png   car16.png   car19.png   car21.png   car24.png   car4.png    car7.png
car11.png   car14.png   car17.png   car2.png    car22.png   car25.png   car5.png    car8.png

脚本输出:

>> load_cartoon

name =

.


name =

..


name =

.DS_Store


name =

car1.png

car1.png

name =

car10.png

car10.png

name =

car11.png

car11.png

name =

car12.png

car12.png

name =

car13.png

car13.png

name =

car14.png

car14.png

name =

car15.png

car15.png

name =

car16.png

car16.png

name =

car17.png

car17.png

name =

car18.png

car18.png

name =

car19.png

car19.png

name =

car2.png

car2.png

name =

car20.png

car20.png

name =

car21.png

car21.png

name =

car22.png

car22.png

name =

car23.png

car23.png

name =

car24.png

car24.png

name =

car25.png

car25.png

name =

car3.png

car3.png

name =

car4.png

car4.png

name =

car5.png

car5.png

name =

car6.png

car6.png

name =

car7.png

car7.png

name =

car8.png

car8.png

name =

car9.png

car9.png

正如您在上面的脚本输出中所看到的,name中的第一行是隐藏文件,第二行没有隐藏文件。

2 个答案:

答案 0 :(得分:4)

疯狂物理学家的回答是正确的,为什么你有这个问题。

但是,如果这是您的最终目标,看起来有一种更简单的方法可以在目录中获取PNG列表。

foreach ($ajProducts as $ajProduct ) {

   if ( "A" == $ajProduct->name ) {
     $jSearchResult[] = $ajProduct->name;
     $match_found = true;    
   }
}

不需要循环或目录检查。

答案 1 :(得分:3)

问题很可能是您正在使用ecell中的索引将索引移动到ls。除非您的所有隐藏文件都位于列表的末尾,否则ecell的长度与ls的长度相同。您可以使用@LuisMendo的建议删除锁步:

listing = dir(png_dirpath);
ecell = {};

for item = listing'
    if item.name(1) == '.'
        ecell{end + 1} = fullfile(png_dirpath, item.name);
    end
end

部分问题在于,您的结论是隐藏文件仍然存在于ecell长度为28个元素的事实上。如果您查看了内容,您会发现您的算法几乎是正确的。调试是一项学到的技能。学习如何非常容易(你对打印输出有正确的想法),但要学习哪里非常困难。