Dir command addresses one extra file
5 次查看(过去 30 天)
显示 更早的评论
Hello all,
I have a folder containing 9 .htk files. I need to use "dir", and then "readhtk" in a loop to import them to MATLAB, but DIR appears to give 10 files instead of 9! here is my code:
htkfiles = dir('/Users/Desktop/Acsegment/mfcdir/*.htk');
nhtkfiles = length(htkfiles); % 10!!! It should be 9 tough!
data = cell(nhtkfiles,2);
for k = 1:nhtkfiles
b(k,1) = strcat({'/Users/Desktop/Acsegment/mfcdir/'},{htkfiles(k,1).name});
eval(['data{k,1} = readhtk(b{k,1});']);
end
When looking at the filenames in htkfiles, I have them like this:
htkfiles(1,1).name = '.htk'
htkfiles(2,1).name = 'fadg0_si1279.htk'
htkfiles(3,1).name = 'fadg0_si1909.htk'
htkfiles(4,1).name = 'fadg0_si649.htk'
htkfiles(5,1).name = 'fadg0_sx109.htk'
htkfiles(6,1).name = 'fadg0_sx19.htk'
htkfiles(7,1).name = 'fadg0_sx199.htk'
htkfiles(8,1).name = 'fadg0_sx289.htk'
htkfiles(9,1).name = 'fadg0_sx379.htk'
htkfiles(10,1).name = 'faks0_si943.htk'
Comparing to what I see in that folder, the first file is not supposed to be there! Anyone got any ideas why Im getting one extra file?
2 个评论
per isakson
2014-12-18
编辑:per isakson
2014-12-18
I cannot reproduce the issue on R2013a, Win7, 64bit. However, .htk seems to be a legal file name. Are you sure there isn't a file with that name on the disk.
Guillaume
2014-12-18
As others have said, if dir returns that file that's most likely because the file is there.
However, I wamted to comment on your example. You don't need a loop to generate b:
b = strcat(''/Users/Desktop/Acsegment/mfcdir/', {htkfiles.name});
And more importantly, don't use eval to just call a function. You can also avoid the loop using cellfun, in which case you don't even need to predeclare data:
data = cellfun(@readhtk, b, 'UniformOutput', false);
采纳的回答
Guillaume
2014-12-18
编辑:Guillaume
2014-12-18
If all you want to do is remove files starting with '.', it's simply
htkfiles = dir('/Users/Desktop/Acsegment/mfcdir/*.htk');
htkfiles(strncmp({htkfiles.name}, '.', 1)) = []; %remove files and dir starting with '.'
Or, to remove directory as well (a good idea):
htkfiles(strncmp({htkfiles.name}, '.', 1) | [htkfiles.isdir]) = []; %remove directory from list as well
As per my comment, you can then continue with:
htkfullpath = strcat('/Users/Desktop/Acsegment/mfcdir/', {htkfiles.name});
data = cellfun(@readghtk, htkfullpath, 'UniformOutput', false);
更多回答(1 个)
Orion
2014-12-18
Hello,
isn't there a hidden file in your folder ? ( '.htk' )
it's still weird because a file without a name and just an extension shouldn't be accepted by windows.
Otherwise, you can identify your files ?
htkfiles = dir('/Users/Desktop/Acsegment/mfcdir/fa*.htk'); % add _fa_ to find all .htk files beginning with it
5 个评论
per isakson
2014-12-18
编辑:per isakson
2014-12-18
- On Windows the version control program, Mercurial, uses folders named .hg
- IIRC FEX-submissions from the mac-world includes folders, the names of which have a period in the first position. Possibly those folders are hidden on the mac. Yes, I'm guessing. Check whether htkfiles.isdir is true
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 File Operations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!