7

Sharpziplib version 0.86zipファイルを解凍するために使用しています。正常に動作していますが、コードを使用して winzip ファイルを抽出しているときに、Lastwritetime が数秒で変化しています...

これも使った File.SetLastWriteTime(fullPath, theEntry.DateTime);

実際のファイルの Lastwritetime: 4/8/2010 2:29:03PM winzip を使用してそのファイルを圧縮した後、コードを使用してそのファイルを抽出している間に、抽出されたファイルの Lastwritetime が4/8/2010 2:29:04PM...これに対する修正はありますか???

4

2 に答える 2

5

Sharpziplib フォーラムからこの回答を得ました

やあ

これは WinZip のバグのようです。これは今まで気がつきませんでした。

私はこのテストをしました:

1) WinZip を使用してファイルを zip に追加します。WinZip で、[プロパティと詳細] をクリックします。詳細リストを調べて、ファイルのタイム スタンプを見つけます。

2) SharpZipLib を使用して、同じ入力ファイルで同様の zip ファイルを作成します。結果を Winzip で開き、[プロパティ] > [詳細] でファイルのタイム スタンプを確認します。

私の入力ファイルには 2010-12-14 15:51:28 の Modified タイムスタンプ (ファイル プロパティ) があり、私のテストでは、SharpZipLib はそれを zip に正しく保存しましたが、WinZip は 2010-12-14 15:51:30 として保存しました。

つまり、WinZip は zip に入れるときに 2 秒追加されました。(WinZip または SharpZip のいずれかを使用して) 抽出した後、Modified は元の 15:51:28 ではなく 15:51:30 になりました。

WinZip のこのような明らかなバグが、これほど長い間報告も修正もされずに放置されていたことは驚くべきことです。有料版を使用している場合は、必ずバグ フォールトを報告する必要があります。

古い 8.3 ファイル システムのタイムスタンプで約 2 秒の粒度だったことを思い出しました。

クイックグーグルはこれを見つけました...

「元の DOS ファイル システムでは、ディレクトリ内のファイルを表すのに 32 バイトしかありませんでした。Win32 ファイル システム (VFAT) では、非常に制限的な 8.3 ファイル名とファイル日付の制限された粒度 (2 秒) が修正されています。」http://www.xxcopy.com/xxcopy15.htmから

Zip 形式では、標準のタイム スタンプ エントリで 2 秒の粒度しか許可されません。日付と時刻は、標準の MS-DOS 形式でエンコードされます。

オプションの NTFS Extra Data フィールド (0x000a) を含めることができ、最終変更時刻、最終アクセス時刻、および作成時刻を保持できます。WinZip はそれを作成していないようです。SharpZip は存在する場合はそれを使用しますが、私が見る限り、FastZip を使用して zip を作成すると作成されません。これは、コードに追加する便利なオプションかもしれません。ZipFile を使用している場合は、手動で作成できます。

これが役に立てば幸いです、デビッド

于 2010-12-16T04:02:06.993 に答える
4

これを引き起こしているのはオペレーティングシステムだけかもしれないと思います。エクスプローラーで何が起こるか試しました。タイム スタンプが 17:06:45 に変更されたテキスト ファイルがあります。ファイルを右クリックし、[送信先 |] を選択します。圧縮 (zip 形式) フォルダー。次に、新しい zip ファイルを右クリックし、[すべて抽出...] を選択してから、[次へ]、[次へ]、[完了] の順に選択します。抽出されたテキスト ファイルのタイム スタンプは 17:06:46 になりました。

7-Zip または WinRar を使用する場合も同じことが起こります。ただし、.zip ファイルを使用している場合にのみ発生します。.7Z または .RAR ファイルを作成しても、タイム スタンプは変更されません。

ウィキペディアで zip 形式に関する記事を見つけました。「秒」で検索すると、ZIP ファイル システムが DOS FAT ファイル システムを模倣しているというセクションが見つかります。DOS FAT ファイル システムの時間分解能は 2 秒しかありません。

于 2010-12-15T13:22:06.550 に答える