これは、ASP(Active Server Pages) & WSH などで利用できる COM コンポーネントです

多分...


はじめに
NTFS5.0 (Windows2000 以降)では、圧縮処理がファイル・システムとしてサポートされました。
という事で、API には、ファイルサイズとしてデータ圧縮済みの時の場合を表示する API とデータ伸張された時のファイルサイズを返す API があるという事になります。
既存のアプリケーションとの互換性を保つため旧来からある GetFileSize() 関数は、データ伸張された時のサイズを返すそうです。
一方で、GetCompressedFileSize() 関数は、ファイルが圧縮されている場合、圧縮時のデータサイズを返すそうです。

となると、VisualBASIC でも使いたいと思うのは、私が VisualBASIC ユーザだからなので、....という事でその COM ラッパとなるわけです。

参考 : 日経ソフトウェア 2000年10月号「Windows2000 プログラミングのツボ」


バージョン・チェックしてる?
してないです。この COM を NTFS でないファイル(Windows9x 系)や、圧縮をサポートしていない NTFS である WindowsNT4.0 上で実行したら....どうなるのでしょう。
作者である私には、予想できません。


使用方法
  1. sCOMmon.dll が必要ですので、ダウンロードして、sCOMmon.dll をシステム・ディレクトリ(%SystemRoot%\System32 {Win64 → %SystemRoot%\SysWOW64})にコピーしてください。
  2. ファイルをダウンロードします。
  3. ダウンロードしたファイルを解凍しします。
    (LHA は、吉崎栄泰氏が、著作権を所有)
  4. sNTFScom.dll を任意のディレクトリにコピー。
  5. コピーされたディレクトリで、regsvr32.exe を実行して sNTFScom.dll をレジストリに登録。
  6. (同梱されている regsvr32.bat を sNTFScom.dll と同一ディレクトリにコピーして実行することでも可能。
  7. 以上で、
    VBScript,JScript,VisualBASIC にて、この COM コンポーネントを利用可能。



使い方(VBScript を例にして...)
基本的には
  1. オブジェクトを生成{CreateObject()}
  2. メソッド実行(16進数表記の文字列でファイルサイズが返りますので、後は自由に加工してください)
  3. オブジェクトを解放{Nothing キーワード}

ってな感じです。


CreateObject に渡す文字列
sComNTFS.GetInfoCom.1



アンインストール方法
RegSvr32 コマンドの /u オプションを用いて、sNTFScom.dll をレジストリから削除するだけです。
必要がないようでしたら、sCOMmon.dll も削除してください。

免責など
著作権は保持します。
しかし、このソフトを使用したことによって生じた、
いかなる損害についても責任は持ちません。
ソースコードについては、各自の責任において、自由にいじってくれてもいいです。

修正についての提案や、バグレポートなどは、メールにて受け付けています。


ソースコードについて
ReleaseMiniSize でコンパイルする時に、プリプロセッサ定義の「_ATL_MIN_CRT」を削除しました。


DownLoad(sComNTFS.lzh as 95,664byte) (sComNTFS.lzh.base64)
sNTFScom.dll is 65,536byte(ver1.1.0.3)


変更履歴



COM メソッド一覧


GetHLinkNumCom(ファイルパス)
GetHLinkNumComW(ファイルパス)
内容 ファイルパスを絶対パスとして第一引数に渡すと、そのファイルのハードリンクの数を返す

GetHLinkNumCom() と GetHLinkNumComW() の違いは、引数を内部的に UNICODE で処理するか、ANSI に変換してい処理するかの違い。

通常のファイルは、一つだけなので、「1」が返る。
ハードリンク機能を使うことで、「2」以上の値が返るはず。

どれが、ハードリンクで一緒のファイルかは....

引数 ファイルパス(絶対パスが望ましい....相対パスの場合は、カレントディレクトリから指定することになる)
戻り値 16進数表記


GetFileIDCom(ファイルパス)
GetFileIDComW(ファイルパス)
内容 ファイルパスを絶対パスとして第一引数に渡すと、そのファイルの NTFS 上での FileID を返す

GetFileIDCom() と GetFileIDComW() の違いは、引数を内部的に UNICODE で処理するか、ANSI に変換してい処理するかの違い。

全ドライブをスキャンして、同一の FileID を見つけたら、その二つのファイルは、ハードリンクで同一内容のファイルという事になるけど....そんなことしたらディスクが傷むな...(ボソっ

引数 ファイルパス(絶対パスが望ましい....相対パスの場合は、カレントディレクトリから指定することになる)
戻り値 16進数表記


GetStreamLS(ファイルパス)
GetStreamLSw(ファイルパス)
GetStreamLSwHex(ファイルパス)
内容 ファイルパスを絶対パスとして第一引数に渡すと、ストリーム一覧が返る

GetStreamLS() と GetStreamLSw() の違いは、引数を内部的に UNICODE で処理するか、ANSI に変換して処理するかの違い。
GetStreamLSw() と GetStreamLSwHex() の違いは、出力を 16進数表示で出力するかどうかの違い

引数 ファイルパス(絶対パスが望ましい....相対パスの場合は、カレントディレクトリから指定することになる)
戻り値 以下の書式で、ストリーム一覧が返る
ストリーム名「\」ストリームのサイズ(16進数表記)Lf


GetCompressedFileSizeCom(ファイルパス)
GetCompressedFileSizeComW(ファイルパス)
内容 ファイルパスを絶対パスとして第一引数に渡すと、16進数表記でファイルサイズが返る
ファイルが NTFS 圧縮されていれば、圧縮された状態でのファイルサイズが返る

GetCompressedFileSizeCom() と GetCompressedFileSizeComW()の違いは、引数を内部的に UNICODE で処理するか、ANSI に変換してい処理するかの違い。

引数 ファイルパス(絶対パスが望ましい....相対パスの場合は、カレントディレクトリから指定することになる)
戻り値 16進数表記で圧縮されている状態のファイルサイズ(byte)


GetFileSizeCom(ファイルパス)
GetFileSizeComW(ファイルパス)
内容 ファイルパスを絶対パスとして第一引数に渡すと、16進数表記でファイルサイズが返る
ファイルが NTFS 圧縮されていても元の状態(伸張された状態)でのファイルサイズが返る

GetFileSizeCom() と GetFileSizeComW()の違いは、引数を内部的に UNICODE で処理するか、ANSI に変換してい処理するかの違い。

引数 ファイルパス(絶対パスが望ましい....相対パスの場合は、カレントディレクトリから指定することになる)
戻り値 16進数表記でのファイルサイズ(byte)


GetDiskFreeSpaceCom(ドライブ名)
内容 指定したドライブの空き領域のサイズ(byte)を返す
ディスククォータ機能が有効な場合は、そのユーザが利用できる空き領域を返すことになる。

引数 ドライブ文字
戻り値 ディスクサイズ(16進数表記)をカンマ区切りで 3 つ返す
順番に
  1. ドライブの空き領域のサイズ(byte)(ディスククォータで制限されている残り容量)
  2. ドライブの全容量(byte)
  3. ドライブの空き領域のサイズ(byte)



エラー一覧
sError.h を参照
4GB 以上について
DWROD 変数を 2 つ使って、4GB 以上に対応しているのが、Win32API の GetFileSize(),GetDiskFreeSpace(),GetCompressedFileSize() です。
きちんと対応していると思うが、やってみないと分からないかな


mail to active@window.goukaku.com