ファイル情報取得処理について – プログラミング – Home

ファイル情報取得処理について
 
通知
すべてクリア

[解決済] ファイル情報取得処理について


test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

VC++/CLIです。

以前にこちらでファイル情報の取得方法をお聞きしましたが再度行き詰ってしまったた
めアドバイスお願いします。

前のスレを解決済みとしてしまったため新スレで申し訳ございません。

あるディレクトリからファイル情報を取得してListViewへ表示させていますがファイル
名、ファイルサイズ、ファイル作成日等はFileInfo^で取得出来るのですがWindowsの詳
細表示の設定にあるファイルの種類(ビデオクリップ、ビットマップイメージ等)やファ
イルの大きさ(1280×1024等)の情報の取得はどのようにしたら取得できるのでしょう
か?何か他のAPIやクラスを使用しなければ無理でしょうか?


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

http://ant0x.udap.jp/tips/tips_fileSummaryInfo.htm


>Shellを利用する方法
で十分ならそれでよさそう。

>Dsofile.dllを使用する方法
はC#,VBではないので直接IPropertyStorageを使ったほうが効率がよいでしょう。


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん

いつもながら早々のレスありがとうございます。

参照の追加でMicrosoft Shell Controls And Automationを追加してshellを利用する方
法で上手く取得することが出来ました。

Shellを実装したプログラムは初めてですので勉強になりました。


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

解決済みですが1点質問があります。

Shell32でファイル情報を取得するプログラムですが

void CreateFieInfo(String^ strName){

 strSozaicyou = ";
 strPixcel = ";

 ShellClass^ shell = gcnew ShellClass();

 Folder^ f = shell->NameSpace(パス);
FolderItem^ item = f->ParseName(strName);

 strSozaicyou = f->GetDetailsOf(item,21);
strPixcel = f->GetDetailsOf(item,26);

}

>>shell->NameSpace(パス);

上記のパスですが相対パス(../フォルダ/)で記述したいのですが相対パスだと値が取得
できませんでした・・・。絶対パスなら問題ないのですが・・・。相対パスを使用して
何か上手くいく方法はありませんでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

試せる環境がないのでなんともいえないのですが、
本当にうまくいきませんか?

相対パスはカレントフォルダからになりますが、正しいパスになっていますか?
(Directory::GetCurrentDirectory()でカレントフォルダが確認できる)

もしだめなら、FileInfoオブジェクトからFullNameプロパティの値を取得して
使うのはどうでしょうか?
(これはうまくいくはず。(C#で確認済み。出来なければパスが間違っている))


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん

いつもありがとうございます。

>>相対パスはカレントフォルダからになりますが、正しいパスになっていますか?
>>(Directory::GetCurrentDirectory()でカレントフォルダが確認できる)

相対パスは正しいパスでした。Defineで相対パスを定義しており他のロジックでも使用
しているのですがShell処理以外の処理では問題なく動作しています。

>>もしだめなら、FileInfoオブジェクトからFullNameプロパティの値を取得して
>>使うのはどうでしょうか?

FullNameプロパティですとC:\test\test.txtとフルパスで取得されてしまいますが

ShellClass^ shell = gcnew ShellClass();

Folder^ f = shell->NameSpace(C:\test);   ←ファイルがあるフォルダ
FolderItem^ item = f->ParseName(test.txt); ←ファイル

String^ a = f->GetDetailsOf(item,21);

上記のようにフォルダとファイルを別けて取得しているのですがFullNameプロパティで
ファイルがあるフォルダまでのパスだけを取得したいのですが可能でしょうか?


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

たびたびすみません

FileInfoオブジェクトのDirectoryNameプロパティの値を取得して対応しました。

お手数お掛けしましたm(--)m


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>ファイルがあるフォルダまでのパスだけを取得したいのですが可能でしょうか?
System::IO::Pathあたりのメソッドを使えば可能でしょう。

[C#,VB]パスに関する情報を取得する
パスからファイル名、拡張子、ディレクトリ名、ルートディレクトリ名等を取得する
http://dobon.net/vb/dotnet/file/pathclass.html

ついでに、相対パスから絶対パスにするのもSystem::IO::Pathのメソッドで出来ます
ね。

[C#,VB]現在のディレクトリを基準にして相対パスから絶対パスを取得する
http://dobon.net/vb/dotnet/file/getabsolutepath.html


返信引用
Stephen
 Stephen
(@Stephen)
ゲスト
結合: 17年前
投稿: 1

返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました