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
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
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
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
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
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
Negar
Negar 2014-12-18
"ls -a" gives me 9 files, the .htk file is not included.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 File Operations 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by