キャビネットファイルの中にあるファイル名を取得するには

解決


どら  2006-12-01 21:39:18  No: 63781

こんにちは、久々の登録です。
社内で、Cabファイルの中にあるファイル名を条件検索するツールを作ろうと思っています。

どの関数を使えばいいのか等がよく分からず、いろいろ探しています。
どなたかご存じの方いらっしゃいましたら、教えていただけないでしょうか?

ちなみに、開発環境はWinXP + VC++.NET 2003、ユーザの環境はWin2K、XPどちらもあります。


シャノン  2006-12-01 22:48:01  No: 63782

Microsoft Cabinet SDK や CAB32.DLL 等を使うと楽でしょう。


どら  2006-12-02 04:31:10  No: 63783

シャノンさん

ありがとうございます。
Microsoft Cabinet SDKまではたどり着けました!!

で、早速いろいろ試しているのですが・・・
出だしでいきなりつまずいてます。

FDICreate関数なのですが、MSDNをみると

HFDI FDICreate(
  PFNALLOC pfnalloc,               //The memory allocation function. 
  PFNFREE pfnfree,                 //The memory freeing function.
  PFNOPEN pfnopen,                 //The function to open a file. 
  PFNREAD pfnread,                 //The function to read data from a file. 
  PFNWRITE pfnwrite,               //The function to write data to a file.
  PFNCLOSE pfnclose,               //The function to close a file. 
  PFNSEEK pfnseek,                 //The function to seek to a new position in a file. 
  int cpuType,                     //In the 16-bit version of FDI, specifies the CPU type and can be any of the following values.
  PERF perf                        //A pointer to an error structure. 

);

とあるのですが・・・
この"The function to xxxx"というものが、何を選択すればよいのか全くわからず・・・。

専用の関数を何か作らなければならないって事なのでしょうか?

どなたかご教授いただけないでしょうか?


どら  2006-12-02 08:53:10  No: 63784

↑はいけました☆

んで、こんな感じで作り始めて・・・

HFDI hFDI;
ERF erf;
int hf;
FDICABINETINFO  fdici;
PFNFDINOTIFY fdintf;

hFDI = FDICreate((PFNALLOC)malloc, free, (PFNOPEN)_open, (PFNREAD)_read, (PFNWRITE)_write, (PFNCLOSE)_close, _lseek, cpu80386, &erf);
if(hFDI == NULL)
{
  return FALSE;
}

hf = _open(CABFilePath, O_BINARY | _O_RDONLY | _O_SEQUENTIAL, 0);
if(hf == -1)
{
  if(hFDI != NULL)
  {
    FDIDestroy(hFDI);
  }
  return FALSE;
}

・・・と、ファイルを開いてCabファイルかチェックするところまではいけたのですが・・・
中のファイル名を取得する関数が見つからなくて・・・。

どなたか御存知の方いらっしゃいますか?
参考になるページとかでもけっこうです。

お願いいたします。


どら  2006-12-03 08:49:08  No: 63785

すみません。自己解決しました。
Cabinet SDKではなく、Setup APIを使ってできました☆
SetupIterateCabinet()を使って、何とかうまくできました。

ありがとうございました。


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

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






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