2013年6月29日土曜日

ファイルの属性(プロパティー)の取得:Shell32

ソリューションエクスプローラからプロジェクトを選択して、
右クリックして、参照を選択して、COMタブを選択して、
Microsoft Shell Controls And Automationを追加する


/*
空のCLRプロジェクト
音楽ファイルの長さを取得
*/

using namespace System;//Console::ReadLine()で必要

using namespace Shell32;//ShellClass Folder FolderItem とかで必要

[STAThread]//Shell32::Folder ^f = shell->NameSpace(dir);で出る例外対策
void main(){

 String ^dir = "G:\\sampleMovie"; // MP3ファイルのあるディレクトリ
 String ^file = "Amanda.wma";

 ShellClass ^shell = gcnew ShellClass();

 Folder ^f = shell->NameSpace(dir);
 FolderItem ^item = f->ParseName(file);

 Console::WriteLine(f->GetDetailsOf(item,  27)); // 長さ win8の場合

 Console::ReadLine();//入力待-ウインドウ維持
}


すべての属性取得

/*
空のCLRプロジェクト
ファイルの属性をすべて表示・取得
*/

#include <stdio.h>  //NULL とかで必要

using namespace System;//Console::ReadLine()で必要
using namespace Shell32;//ShellClass Folder FolderItem とかで必要

[STAThread]//Shell32::Folder ^f = shell->NameSpace(dir);で出る例外対策
void main(){

 String ^dir = "G:\\sampleMovie"; // MP3ファイルのあるディレクトリ
 String ^file = "Amanda.wma";

 ShellClass ^shell = gcnew ShellClass();

 Folder ^f = shell->NameSpace(dir);
 FolderItem ^item = f->ParseName(file);

 int i = 0;
 String^ name = f->GetDetailsOf(NULL, i);

 while ( !String::IsNullOrEmpty( name ) )
 {
  // 属性名 表示
  Console::WriteLine("{0,3} : {1}", i, name);

  i++;
  name = f->GetDetailsOf(NULL, i);
 }

 Console::ReadLine();//入力待-ウインドウ維持
}


値のある属性のみ取得

/*
空のCLRプロジェクト
ファイルの属性で値のあるものを表示・取得
*/

#include <stdio.h>  //NULL とかで必要

using namespace System;//Console::ReadLine()で必要
using namespace Shell32;//ShellClass Folder FolderItem とかで必要

[STAThread]//Shell32::Folder ^f = shell->NameSpace(dir);で出る例外対策
void main(){

 String ^dir = "G:\\sampleMovie"; // MP3ファイルのあるディレクトリ
 String ^file = "Amanda.wma";

 ShellClass ^shell = gcnew ShellClass();

 Folder ^f = shell->NameSpace(dir);
 FolderItem ^item = f->ParseName(file);

 int i = 0;
 String^ name = f->GetDetailsOf(NULL, i);

 while ( !String::IsNullOrEmpty( name ) )
 {
  // 属性の値を取得
  String^ value = f->GetDetailsOf(item, i);
  //値があれば表示
  if (!String::IsNullOrEmpty( value ))
  {
   Console::WriteLine("{0,3} : {1}", i, name);//属性名
   Console::WriteLine("\t{0}", value);//値
  }

  i++;
  name = f->GetDetailsOf(NULL, i);
 }

 Console::ReadLine();//入力待-ウインドウ維持
}



0 件のコメント:

コメントを投稿