ファイルの圧縮と圧縮解除

NTFS ファイル システム ボリュームでは、個々のファイルベースでのファイル圧縮がサポートされます。 NTFS ファイル システムで使用されるファイル圧縮アルゴリズムは、圧縮Lempel-Ziv。 これは 無損失 圧縮アルゴリズムです。これは、JPEG などの 可逆圧縮アルゴリズムとは対照的に、ファイルの圧縮と圧縮解除時にデータが失われないことを意味します。このアルゴリズムでは、データの圧縮と圧縮解除のたびに一部のデータが失われます。

データ圧縮では、冗長データを最小限に抑えることで、ファイルのサイズが小さくなります。 テキスト ファイルでは、冗長データは、スペース文字や、e や a などの一般的な母音など、頻繁に発生する文字である可能性があります。また、頻繁に発生する文字列である場合もあります。 データ圧縮では、この冗長データを最小限に抑えることで、ファイルの圧縮バージョンが作成されます。

データ圧縮アルゴリズムの種類ごとに、一意の方法で冗長データが最小限に抑えられます。 たとえば、 Huffman エンコード アルゴリズム は、それらの文字の出現頻度に基づいてファイル内の文字にコードを割り当てます。 実行長エンコードと呼ばれるもう 1 つの圧縮アルゴリズムでは、繰り返される文字に対して 2 部構成の値が生成されます。最初の部分では文字が繰り返される回数を指定し、2 番目の部分は文字を識別します。 Lempel-Ziv アルゴリズムと呼ばれるもう 1 つの圧縮アルゴリズムは、可変長文字列を、元の文字列よりも少ない領域を使用する固定長コードに変換します。

NTFS ファイル システム ファイルの圧縮

NTFS ファイル システムでは、圧縮は透過的に実行されます。 つまり、既存のアプリケーションを変更しなくても使用できます。 ファイルの圧縮バイトは、アプリケーションからアクセスできません。圧縮されていないデータのみが表示されます。 したがって、圧縮ファイルを開くアプリケーションは、圧縮されていないかのように操作できます。 ただし、これらのファイルを別のファイル システムにコピーすることはできません。

30 ギガバイトを超えるファイルを圧縮すると、圧縮が成功しない可能性があります。

次のトピックでは、NTFS ファイル システムファイルの圧縮を示します。

ファイル圧縮および圧縮解除ライブラリ

ファイル圧縮および圧縮解除ライブラリは、既存のファイルを取得し、元のファイルの圧縮バージョンであるファイルを生成します。 圧縮も無損失ですが、圧縮はアプリケーションに対して透過的ではありません。 アプリケーションは、ファイル圧縮ライブラリを使用して、このようなファイルに対してのみ操作できます。 また、このようなファイルに対して実行できる操作は、元のファイルから圧縮ファイルを作成し、圧縮解除されたバージョンから元のデータを回復することだけです。 通常、編集はサポートされず、サポートされている場合はシークが制限されます。

通常、アプリケーションは Lz32.dll の関数を呼び出して、Compress.exeを使用して圧縮されたデータを圧縮解除します。 関数は、圧縮解除を試みることなくファイルを処理することもできます。

Lz32.dllの 関数を使用して、1 つまたは複数のファイルを展開できます。 また、圧縮ファイルを一度に一部圧縮解除するためにも使用できます。

次のトピックでは、Lz32.dll の関数によって提供されるファイルの圧縮解除について説明します。

キャビネット

キャビネットは、ディスクスパンやマルチファイル圧縮などの機能をサポートする圧縮ライブラリによって作成されます。 詳細については、「キャビネット ソフトウェア開発キット: https://msdn.microsoft.com/library/dncabsdk/html/cabdl.asp」を参照してください。

このセクションの内容

トピック 説明
圧縮属性
NTFS ファイル システム ボリュームでは、各ファイルとディレクトリに 圧縮属性があります。
圧縮状態
個々のファイルとディレクトリの圧縮をサポートするボリューム上の各ファイルとディレクトリは 、圧縮状態になります
圧縮ファイルのサイズの取得
ファイルの圧縮サイズを取得するには、GetCompressedFileSize 関数を使用します。
1 つのファイルの圧縮解除
アプリケーションは、LZOpenFile、LZCopy、および LZClose 関数を使用して、1 つの圧縮ファイルを圧縮解除できます。
複数のファイルの圧縮解除
アプリケーションでは、LZOpenFile、LZCopy、および LZClose 関数を使用して、複数のファイルを展開できます。
圧縮ファイルからの読み取り
アプリケーションでは、LZSeek 関数と LZRead 関数を使用して、圧縮ファイルを一度に 1 つずつ圧縮解除できます。