Matlab中dir使用中遇到的一些问题
2016-01-30 20:15
501 查看
今天调程序时遇到一个bug 感觉有点意思 也许有人会遇到类似的问题吧
跑到这崩溃了 回头一看原因笑了:dir把当前目录’.’和上级目录’..’都读出来了(当然,也有当前目录里的其他目录) 这些目录audioread肯定处理不了
但是dir返回的是一个N*1的struct 这是一个栗子
好在dir很贴心的设计了isdir这个域 我只要留下isdir的值为0的部分就行
但问题在于 怎么删除掉这n个目录或者只保留下N个文件
恶心的一点在于 struct的rmfield函数会直接删掉整个字段
好吧 那就把文件的数据提取出来合成成一个新的struct
不知道为什么 有几个目录中’..’的isdir居然是0 可能是因为它的上级是磁盘驱动器吧 所以加了~strcmp(inst(k).name,’..’)这个条件
这种形式 顺便还能过滤掉之后不能audioread读取的文件类型
问题
说手上有一段代码 原本是希望在一个文件夹中读取出其中所有音频文件的tdir=dir(fullfile(SoundDir,SoundFileName)); NumSounds=length(tdir); [NameSounds{1:NumSounds}]=deal(tdir.name); %%%%%此处省略X行%%%%% [Signal.yy, Signal.Fs] = audioread(fullfile(SoundDir,NameSounds{soundI}));
跑到这崩溃了 回头一看原因笑了:dir把当前目录’.’和上级目录’..’都读出来了(当然,也有当前目录里的其他目录) 这些目录audioread肯定处理不了
解决
好吧 那就在dir得到tdir之后把其中文件夹的字段都删除掉好了但是dir返回的是一个N*1的struct 这是一个栗子
>>s =dir('.') %以下是数据的脚本 s = struct; s(1, 1).name = '.'; s(1, 1).date = '30-1月-2016 16:15:05'; s(1, 1).bytes = 0; s(1, 1).isdir = true; s(1, 1).datenum = 736359.67714120366; s(2, 1).name = '..'; s(2, 1).date = '30-1月-2016 10:14:28'; s(2, 1).bytes = 0; s(2, 1).isdir = true; s(2, 1).datenum = 736359.42671296292; s(3, 1).name = 'KeyboardMouse.ini'; s(3, 1).date = '28-6月-2013 08:07:00'; s(3, 1).bytes = 367; s(3, 1).isdir = false; s(3, 1).datenum = 735413.33819444443;
好在dir很贴心的设计了isdir这个域 我只要留下isdir的值为0的部分就行
但问题在于 怎么删除掉这n个目录或者只保留下N个文件
恶心的一点在于 struct的rmfield函数会直接删掉整个字段
好吧 那就把文件的数据提取出来合成成一个新的struct
function outst = deletedir(inst) outst = struct('name',{},'date',{},'bytes',{},'isdir',{},'datenum',{}); for k = 1:length(inst) if ((~inst(k).isdir) & (~strcmp(inst(k).name,'..'))) outst = [outst;inst(k)]; end end return
不知道为什么 有几个目录中’..’的isdir居然是0 可能是因为它的上级是磁盘驱动器吧 所以加了~strcmp(inst(k).name,’..’)这个条件
补充
回过头来考虑了一下 在当初使用dir时就该直接使用dir(dir(fullfile(SoundDir,*.wav)))
这种形式 顺便还能过滤掉之后不能audioread读取的文件类型
相关文章推荐
- 解析在main函数之前调用函数以及对设计的作用详解
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- 从java中调用matlab详细介绍
- 稀疏自动编码器 (Sparse Autoencoder)
- VC++与Matlab混合编程的快速实现
- Matlab 矩阵运算
- matlab与opencv部分函数的对照
- matlab神经网络工具箱创建神经网络
- Matlab
- MATLAB 入门教程
- matlab函数_连通区域
- MATLAB中函数模式和命令模式的区别
- MATLAB 添加自定义的模块到simulink库浏览器
- MATLAB for Mac使编辑器支持中文
- [转]matlab中plot用法
- 初学数模-MATLAB Quick Start! Part I
- 初学数模-MATLAB Quick Start! Part II
- matlab程序优化以及eclipse与github的结合
- matlab中的rand函数(用于产生随机数)