こんばんは。
VB2005、XPにてエクスプローラ風のアプリケーションを開発しています。
C:\直下にあるAUTOEXEC.BAT等のファイルを表示したくないのですが、
IO.FileAttributes.HiddenやIO.FileAttributes.Systemで
属性による除外をしても表示されます。
この方法でよいのかもわからなくなりました。
良い方法があればお教えください(__)。
> IO.FileAttributes.HiddenやIO.FileAttributes.Systemで
> 属性による除外をしても表示されます。
該当ファイルが隠しファイルでもシステムファイルでもないからじゃ?
そーなんです。そーいうことなんでしょうね。
AUTOEXEC.BATとCONFIG.SYSを表示したくありません。
Dim Folder As New IO.DirectoryInfo(m_strPath & "\")
Dim oFile As IO.FileInfo
For Each oFile In Folder.GetFiles
If oFile.Attributes And IO.FileAttributes.Hidden Then
Debug.Print(oFile.Name & " is HiddenFile.")
ElseIf oFile.Attributes And IO.FileAttributes.System Then
Debug.Print(oFile.Name & " is SystemFile.")
Else
'ListViewに表示
End If
Next
このようなコードにしています。
よろしくお願いします。
> AUTOEXEC.BATとCONFIG.SYSを表示したくありません。
単純に、ファイル名で判定すれば良いのでは?
不可視属性やシステム属性が付加されていない以上、
FileAttributes での判定は無意味でしょうし。
魔界の仮面弁士さんありがとうございます。
隠しファイルやシステムファイルを表示したくなかったのですが、
表示されたもので、困ってました(--;。
こういったファイルが他に存在しないのであればいいのですが…。
特別な処理があるならお聞きしたかったのです。
ファイル名で判定するしかないのですかね??
> 隠しファイルやシステムファイルを表示したくなかったのですが、
それについては、Franz さんは既に実装済みだと思いますよ。
強いて言えば、「Option Strict On に対応できていない点(Boolean への暗黙型変換)」と、
「隠し属性とシステム属性の両方が付いていた時に、HiddenFile と表示される点」が
問題だとは思いますけれど、それはまた別の話。
> 表示されたもので、困ってました(--;。
AUTOEXEC.BAT に隠し属性を付けておけば、今のコードでも見えなくなりますよ。
> ファイル名で判定するしかないのですかね??
正確に言えば、ファイル名ではなくフルパスとなるべきでしょうね。
たとえば Windows XP のエクスプローラの場合、下記のような動作になっています。
-----
エクスプローラの設定で
『保護されたオペレーティング システム ファイルを表示しない』
をオフにした状態で、C:\AUTOEXEC.BAT をマイドキュメントに「移動」させてから、
『保護されたオペレーティング システム ファイルを表示しない』
を、オンにしてみてください。
この時点では、マイドキュメント内の AUTOEXEC.BAT は見えている状態です。
そしてさらに、その AUTOEXEC.BAT を、C:\ に「コピー」してみます。
コピーした直後は、まだ C:\AUTOEXEC.BAT が見えていますが、F5 キーなどで
エクスプローラの表示を更新すると、C:\AUTOEXEC.BAT が見えない状態になります。
しかし、マイドキュメント内の AUTOEXEC.BAT は見えているはずです。
つまり、単にファイル名のみで判断されているのではなく、そのパスも考慮されている、と。
的確なご回答ありがとうございます。
確かにそうですね、試してみました。
[[解決]]まであと少しお教えください。
このようなパスによって見えなくなったりするファイルというのは
この2つ以外に存在するのでしょうか?
ご存知でしたらお教えくださいm(__)m。
ツイート | ![]() |