2

VS 2010 と Win32 を使用して C++ でコードを作成し、単に TAR ファイルを抽出しています。

抽出を行うために、アルゴリズムをゼロから完全に実装しました。

次のような TAR ヘッダー構造があります。

/* tar Header Block, from POSIX 1003.1-1990.  */

/* POSIX header.  */

struct posix_header
{                              /* byte offset */
  char name[100];               /*   0 */
  char mode[8];                 /* 100 */
  char uid[8];                  /* 108 */
  char gid[8];                  /* 116 */
  char size[12];                /* 124 */
  char mtime[12];               /* 136 */
  char chksum[8];               /* 148 */
  char typeflag;                /* 156 */
  char linkname[100];           /* 157 */
  char magic[6];                /* 257 */
  char version[2];              /* 263 */
  char uname[32];               /* 265 */
  char gname[32];               /* 297 */
  char devmajor[8];             /* 329 */
  char devminor[8];             /* 337 */
  char prefix[155];             /* 345 */
                                /* 500 */
};

この構造から、mtime[12] を使用してファイルの変更されたタイム スタンプを保持できます。次に、Win32 ::SetFileTime() 関数を使用して、抽出したファイルのタイム スタンプ プロパティを更新します。

しかし、問題は、作成されたファイルの時間と最終アクセス時間にアクセスすることです。

この情報がTARヘッダー内のどこに保存されているかを知るのを手伝ってくれる人はいますか???

また、Windows の場合、読み取り専用、非表示、システムなどのファイル アクセス許可をデコードするにはどうすればよいでしょうか?

4

1 に答える 1

2

TAR ファイル形式は Unix の発明であるため、格納されているファイル情報は必ずしも Windows の規則にうまく対応しているとは限りません。

作成時間とアクセス時間は標準の TAR 形式で保存されないため、デフォルトのままにするか、変更時間と同じ値に設定する必要があります。ただし、実際にはustar 形式のファイルを使用している可能性があります。これにより、そのような情報を拡張ファイル エントリに格納する可能性が追加されます。詳しくはこちらをご覧ください。

Unix パーミッションは8 進数modeとしてフィールドに格納されます。Windows ファイル属性に直接相当するものはないため、「w」権限が含まれていない場合は、読み取り専用属性を設定するしかありません。

于 2013-03-21T17:23:55.437 に答える