次の方法で共有


ファイルの圧縮と展開

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

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

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

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 つずつ展開できます。