1.1で正常に機能した.Net Coreプロジェクトがありましたが、現在は2.0で失敗しています。問題は、ZipFile.ExtractToDirectory
(System.IO.Compression
)のzipアーカイブを解凍しようとしたときに発生します。私は、1つのまたは2つのファイルを取得しますが、それはメッセージで例外をスロー:限り、私はそれだけで抽出されたように、おそらく、そのファイルを使用している可能性は他のプロセスが存在しない言うことができるようにZipFile.ExtractToDirectoryが.Net-Core 2.0に失敗しました
The process cannot access the file '<path to file>' because it is being used by another process.
。私はエラーが発生したときに実際にディスク上に存在します。
スタックトレースは次のとおりです。
at System.IO.Win32FileSystem.OpenHandle(String fullPath, Boolean asDirectory)
at System.IO.Win32FileSystem.SetLastWriteTimeInternal(String fullPath, DateTimeOffset time, Boolean asDirectory)
at System.IO.Win32FileSystem.SetLastWriteTime(String fullPath, DateTimeOffset time, Boolean asDirectory)
at System.IO.File.SetLastWriteTime(String path, DateTime lastWriteTime)
at System.IO.Compression.ZipFileExtensions.ExtractToFile(ZipArchiveEntry source, String destinationFileName, Boolean overwrite)
at System.IO.Compression.ZipFileExtensions.ExtractToDirectory(ZipArchive source, String destinationDirectoryName, Boolean overwrite)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileName, String destinationDirectoryName, Encoding entryNameEncoding, Boolean overwrite)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileName, String destinationDirectoryName)
at FunctionDataStore.PackageManagement.InstallPackage(String pkgFile, String pkgDir) in D:\Projects\Momo\UserPlatform\FunctionDataStore\PackageManagement.cs:line 250
私は当分の間、バック1.1に行くことができますが、私は2.0に移動する必要があります。
誰もがこの例外の原因となっている可能性があり、私はそれについて何ができるのか分かりませんか?
追加さ:27 11月17日
私は再起動後に答えを持っていたと思いました。しかし、問題は何度もシステムを再起動しても変わりません。 .NET Core 2.0とSystem.IO.Compression.ZipFile
に問題があります。エラーが発生したときに抽出されたファイルを実際に使用しているプロセスは他にないことを確認しました。
補遺:207 11月17日
スタックトレースがExtractToDirectory
がSetLastWriteTime
呼び出しに失敗していることを示す、と私は本当にファイルのタイムスタンプを気にしないので、私は次のようにExtractToDirectory
呼び出しを置き換えます:
pkgFile
が読み込まれるzipファイルで、
pkgDir
がに抽出するためのディレクトリです
using (ZipArchive archive = ZipFile.Open(pkgFile, ZipArchiveMode.Read))
{
foreach (var entry in archive.Entries)
{
var filename = pkgDir + "\\" + entry.FullName;
var fileDir = Path.GetDirectoryName(filename);
Directory.CreateDirectory(fileDir);
using (BinaryWriter writer = new BinaryWriter(File.Open(filename, FileMode.Create)))
{
byte[] bytes = new byte[1024];
int numbytes;
var stream = entry.Open();
while ((numbytes = stream.Read(bytes, 0, 1024)) > 0)
{
writer.Write(bytes, 0, numbytes);
}
}
}
}
。これは問題なく動作するようです。
SetLastWriteTime
がなぜExtractToDirectory
に失敗したのかまだ分かりませんが、しかし、この回避策は私のニーズには十分であるようです。
うん、いいえ、これは環境問題です。最初の場所は常に開始:インストールされているマルウェア対策製品を無効にして、もう一度やり直してください。 –
@ HansPassant、そうであれば、なぜ.NET Core 1.1で動作するのですか? – melston
相関は因果関係を意味しません。 .NETCoreのバージョンがマシンをリブートすることによって変わらないことを実感することで最も明らかです。 @HansPassant合意した。 –