2017-10-03 21 views
0

1.1で正常に機能した.Net Coreプロジェクトがありましたが、現在は2.0で失敗しています。問題は、ZipFile.ExtractToDirectorySystem.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日

スタックトレースがExtractToDirectorySetLastWriteTime呼び出しに失敗していることを示す、と私は本当にファイルのタイムスタンプを気にしないので、私は次のように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に失敗したのかまだ分かりませんが、しかし、この回避策は私のニーズには十分であるようです。

+0

うん、いいえ、これは環境問題です。最初の場所は常に開始:インストールされているマルウェア対策製品を無効にして、もう一度やり直してください。 –

+0

@ HansPassant、そうであれば、なぜ.NET Core 1.1で動作するのですか? – melston

+0

相関は因果関係を意味しません。 .NETCoreのバージョンがマシンをリブートすることによって変わらないことを実感することで最も明らかです。 @HansPassant合意した。 –

答えて

0

ファイルを使用しているプロセスが見つかり、エラーの原因を突き止めることができます。あなたのファイル

  • process explorer

    1. 実行プロセスエクスプローラ
    2. Ctrlキーを押しながら
    3. Fタイプ名にあなたがあなたのファイル
    4. を使用してプロセスを見つけ、殺すことができるこの方法を、あなたのファイルのダウンロードを使用しているプロセス見つけるために
  • 関連する問題