Matlab的“fileattrib”函数中可能存在的错误。解决方法?

时间:2013-09-05 23:09:26

标签: file matlab file-attributes

我在Windows上的Matlab fileattrib函数中发现了一些奇怪的行为。对于某些文件名,它错误地将文件标识为隐藏的系统文件夹

要测试它,请下载此文件(文件为空;它只是重要的文件名):

https://docs.google.com/file/d/0B9BeckFuQk1bNHY3T0NKaFpxbUU/edit?usp=sharing

将文件放在一个空文件夹上(我正在使用“c:\ temp”)并试试这个:

fileattrib('c:\temp\*')

如果你的Matlab与我的一样,它会给你错误的结果:

ans = 
            Name: 'c:\temp\?aaa.txt'
         archive: 1
          system: 1
          hidden: 1
       directory: 1
              [...]

现在重命名文件名,删除第一个字符,然后重试。它会正确地说

ans = 
            Name: 'c:\temp\aaa.txt'
         archive: 1
          system: 0
          hidden: 0
       directory: 0
            [...]

我在Matlab R2010b和R2007a中看到过这种行为,在Windows Vista和7上。

问题显然与某些“冒犯”字符(或字符集/编码?)有关,但我不知道。有人能弄清楚为什么会这样吗?以及如何解决它?

修改

这似乎已在R2015a(可能更早)中得到纠正:它正确返回

        Name: 'C:\Users\Luis\Desktop\tmp\�aaa.txt'
     archive: 1
      system: 0
      hidden: 0
   directory: 0
        [...]

1 个答案:

答案 0 :(得分:1)

解决这个问题的一种方法是不要(仅)依赖fileattrib命令。

为了确定某些东西是文件还是目录,您可以检查它在包含文件夹上使用dir命令时的注册方式。

这有点麻烦,但是当在文件夹上调用dir时(直接在文件上调用时不起作用),你似乎得到了正确的输出。


快速而肮脏的替代方案当然是将整个处理放在try / catch构造中,如果一个失败,只需尝试另一个。