CABの作り方
Cabの作り方をいろいろ調べた
Windows2000以降ならMakecab.exe以外に、こんな方法があるようだ。
Set cab=CreateObject("MakeCab.MakeCab.1") cab.CreateCab "Test.cab",False,False,False cab.AddFile "test1.txt","test1.txt" cab.AddFile "test2.txt","test2.txt" cab.CloseCab
http://pc5.2ch.net/test/read.cgi/win/1058829737/501-600
でできるらしいが・・・
AddFileの引数のファイル名、どっちが圧縮をかけるファイルで、どっちがCAB内ファイル名を示すのかわからん。
OLE/COM ViewerでDLLを突き止めて、VisualStudioのオブジェクトビューアで調べてみる。
DLLはこれらしい
C:\Windows\Sysem32\catsrvut.dll
オブジェクトビューアで調べた結果
public virtual void AddFile ( System.Object FileName , System.Object FileNameInCab ) public virtual void CloseCab ( ) public virtual void CopyFile ( System.Object CabName , System.Object FileNameInCab ) public virtual void CreateCab ( System.Object CabFileName , System.Object MakeSignable , System.Object ExtraSpace , System.Object Use10Format ) public MakeCabClass ( )
なんとなく、引数で意味がわかった。
AddFileの第一引数は、ローカルファイルをフルパスで渡す。
AddFileの第二引数は、Cabファイル内のファイル名。
Set cab=CreateObject("MakeCab.MakeCab.1") cab.CreateCab "Test.cab",False,False,False cab.AddFile "c:\test1.txt","test1.txt" cab.AddFile "c:\dir\test1.txt","test1.txt" cab.CloseCab
これでも、問題なく圧縮できるが、解凍する際ファイル名がバッティングしてしまいうまく解凍できない。
Set cab=CreateObject("MakeCab.MakeCab.1") cab.CreateCab "Test.cab",False,False,False cab.AddFile "c:\test1.txt","c:\test1.txt" cab.AddFile "c:\dir\test1.txt","c:\dir\test1.txt" cab.CloseCab
これだとフォルダつきで解凍してくれるようだ。
これで、圧縮解凍ソフトがない環境でも簡単に圧縮ファイルを作ることができそうだ。