4

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

要对其进行测试,请下载此文件(该文件为空;重要的是文件名):

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
            [...]

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

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

编辑

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

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

1 回答 1

1

处理此问题的一种方法是不(仅)依赖于fileattrib命令。

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

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


一个快速而肮脏的选择当然是将你的整个处理放在一个try/catch结构中,如果一个失败,只需尝试另一个。

于 2013-09-27T08:44:23.847 回答