ファイル情報を取得するには?

解決


crown  2003-01-09 05:41:50  No: 76766

こんにちわ。crownです。
現在VB6でファイル情報を取得するツールを作成してます。

早速質問なのですが、ファイルの作成日付、ファイルタイプなどは
GetFileInformationByHandleで、まとめて取得できました。
しかし、WinXPやWin2000などはファイルのプロパティに「概要」タブがあり、
その「概要」タブのタイトル、サブジェクト、カテゴリの取得方法がわかりませ。

現在調査していますが、足踏み状態です。
どなたかご存知ある方はご教授よろしくお願いいたします。


特命  2003-01-10 02:46:40  No: 76767

XP や 2000 ではないので分かりませんが、
すべてのファイルに概要タブが
ある訳ではないのではないですか?
txt ファイルにも存在していますか?

NT でも、 doc や xls には概要タブがありますが、
それらは、 Word や Excel に付属する情報で、
内容の取得・設定は、 Word.Application などで行います。


crown  2003-01-10 03:18:20  No: 76768

ご回答ありがとうございます。
txtファイルにも付属されています。
調べているとファイルシステムが管理している情報みたいです。
BackupReadなる関数を使用してそのファイルに関連した
ストリーム情報なるもの取得できれば可能だと感じているのですが・・・・。
まだ、調査中ですが何かわかることがありましたらよろしくお願いします。


たかみちえ  URL  2003-01-10 16:34:01  No: 76769

それは、NTFS(ファイルシステム)の機能ですね、
XPなどで使われているNTFSでは、各ファイルに説明文が付けられるようです。
(わたし、XPでも、使ったことないですけど(^^ゞ)

  その読み方は知りませんけど、
"NTFS コメント 取得"などで検索すれば、もしかしたら何か情報が得られるかもしれません。


crown  2003-01-10 18:36:21  No: 76770

みなさん、ご協力ありがとうございました。
なんとか自分で解決できました。以下のコードがサンプルです。

    Dim Shell, oFolder
    Dim str As String

    Set Shell = CreateObject("Shell.Application")
    Set oFolder = Shell.NameSpace("C:\")
    
    Next

たったこれだけです。簡単に取得できるみたいです・・・・。
それではありがとうございました。


魔界の仮面弁士  2003-01-10 19:15:39  No: 76771

FAT32などでは、1つのファイルに1つのストリーム(無名ストリーム)しか
書き込む事ができませんが、NT3.1, 3.5x, NT4, 2000, XP等で利用される
NTFSでは、1つのファイルに複数のストリームを割り当てることができます。

例えば、"C:\text.txt" に、MyData という名前のストリームデータを
保存したい場合は、Scripting.TextStreamオブジェクトなどを使って、
"C:\test.txt:MyData" というファイル名で保存すればOKです。
  Path = "C:\test.txt:MyData"
  FSO.CreateTextFile(Path).Write "あいうえお"

読み込むときも同様。[ファイル名] + ":" + [ストリーム名] というファイル名でアクセスします。
  Debug.Print FSO.OpenTextFile(Path).ReadAll()

で、本題。

上記では、"MyData"というストリーム名に保存しましたが、XPの概要タブで使われる
ストリームの名前は、『Chr(5) & "SummaryInformation"』という文字列になっていますので、
  Path = "C:\test.txt:" & Chr(5) & "SummaryInformation"
というファイル名で読み込めばOKです。

# ただし、このストリーム中には "タイトル"や"カテゴリ"などといった
# 複数の項目情報がバイナリで格納されていますので(文字列部分はUnicode)、
# TextStreamオブジェクトよりも、(バイナリモードの)ADODB.Streamを
# 利用した方が安全かもしれません。

なお、まだ概要タブでデータを書き込んだ事が無い場合、
  Path = "C:\test.txt:" & Chr(5) & "SummaryInformation"
を開こうとしても、「ファイルがありません」というエラーになりますので、
予め、FSO.FileExists(Path)などを使って、ストリームの存在チェックを
した方が良いかもしれません。


魔界仮面弁士  2003-01-10 19:26:17  No: 76772

>    Set Shell = CreateObject("Shell.Application")
おそらく、VBScript系のサンプルを御覧になったのだとは思いますが、
ShellはVBの関数名にありますので、別の名前にした方が良いと思いますよ。

>    Set oFolder = Shell.NameSpace("C:\")
>    Next
なんか途中が抜けていますね。(^^;)
間に入るのは、GetDetailsOfメソッドでしょうか?


crown  2003-01-10 23:18:42  No: 76773

すいません(−−;
なんか、抜けてますね。もう一度ソースを書き込みます。

Dim Shell, oFolder
Dim str As String

Set Shell = CreateObject("Shell.Application")
Set oFolder = Shell.NameSpace("C:\test\")
    
For I = 0 To 50
    str = str _
          & oFolder.GetDetailsOf(, I) _
          & "=" _
          & oFolder.GetDetailsOf(oFolder.ParseName("test.txt"), I) _
          & vbCrLf _
Next
    
MsgBox str

vb初めて間もないので魔界の仮面弁士 様のいってることは
100%分かりませんが、大分理解はできました。
詳細なご説明ありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加