問題タブ [system.io.compression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
150 参照

c# - c# と System.IO.Compression を使用して zip ファイルを圧縮しているときに進行状況を取得する方法

System.IO.Compression を使用して C# を使用して zip ファイルを圧縮しているときに、% を取得する必要があります。私はこのコードを持っています:

そして、Zip 圧縮のパーセンテージで ProgressBar1 を更新する必要があります。可能です?

0 投票する
1 に答える
293 参照

c# - System.IO.Compression.ZipArchive は破棄後にファイルをロックしたままにしますか?

複数のソースからデータを取得して ZIP ファイルに書き込むクラスがあります。クラスをベンチマークして、使用CompressionLevel.Optimalが よりもはるかに遅くなるかどうかを確認しましたCompressionLevel.Fastest。しかし、ベンチマークは、ベンチマークを実行するたびに、異なる繰り返しで異なるCompressionLevel値で例外をスローします。

空のzipファイルを作成して削除する以外に基本的に何もしない以下のコード(forループ内)になるまで、ファイルコンテンツを追加するメソッドを段階的に削除し始めました。

簡略化されたコード:

resultループは私の PC で約 100 から 15k の反復を実行し、ファイル ( ) がロックされていることを示すファイルを削除しようとすると IOException をスローします。

それで...使用方法について何か見逃しましたSystem.IO.Compression.ZipArchiveか?ZipArchive には close メソッドがなく、使用するとアーカイブを破棄/閉じる必要があります...さまざまな .NET バージョン 4.6、4.6.1、4.7、および 4.7.2 を試しました。

編集 1:は、ベンチマークされたコードの一部で
はありませんresult.Delete()

編集 2:
またThread.Sleep(5/10/20)、ブロックを使用した後で (したがって、result.Delete()ロックが持続するかどうかを確認するために) 試してみましたが、最大 20 ミリ秒まで、ファイルはある時点でまだロックされています。20ms よりも高い値は試しませんでした。

編集 3:
自宅で問題を再現できません。仕事で何十回も試しましたが、ループは20kの反復に達しませんでした。ここで一度試して完了しました。

編集 4:
jdweng (コメントを参照) は正しかった。ありがとう!これは、ローカル hdd の「e:」パーティションに何らかの形で関連しています。同じコードは、ローカル ssd の "c:" パーティションとネットワーク共有でも問題なく実行されます。