4

fileattribWindowsでの 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これに対処する 1 つの方法は、コマンドに (単独で) 依存しないことです。

何かがファイルなのかディレクトリなのかを判断するために、それがdir含まれているフォルダーでコマンドを使用するときに、それがどのように登録されているかを確認できます。

少し面倒ですが、フォルダーで呼び出された dir を使用すると (ファイルで直接呼び出された場合は機能しません)、正しい出力が得られるようです。


もちろん、手っ取り早く汚い代替手段は、処理全体をtry/catch構造に入れ、一方が失敗した場合は、単純に他方を試すことです。

于 2013-09-27T08:44:23.847 に答える