J'ai un projet .Net-Core qui a bien fonctionné sur 1.1 mais échoue maintenant sur 2.0. Le problème se produit lorsque je tente de décompresser une archive zip avec ZipFile.ExtractToDirectory
(à partir de System.IO.Compression
). Je reçois un ou deux fichiers sur, mais il génère une exception avec le message:ZipFile.ExtractToDirectory échouant sur .Net-Core 2.0
The process cannot access the file '<path to file>' because it is being used by another process.
Pour autant que je peux dire qu'il n'y a pas d'autre processus qui pourrait être utilise ce fichier tel qu'il vient d'être extrait. Il est réellement présent sur le disque quand j'obtiens l'erreur.
La trace de la pile est:
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
je peux revenir à 1.1 pour le moment mais je dois passer à 2.0.
Est-ce que quelqu'un sait ce qui pourrait causer cette exception et ce que je peux faire à ce sujet?
Ajouté: 27 17 novembre
Je pensais avoir la réponse après un redémarrage. Mais maintenant le problème persiste, peu importe combien de fois je redémarre le système. Il y a un problème avec .NET Core 2.0 et System.IO.Compression.ZipFile
. J'ai vérifié qu'aucun autre processus n'utilise réellement les fichiers extraits quand l'erreur se produit.
Addendum: 207 nov 17
Puisque la trace de la pile montre ExtractToDirectory
échoue sur l'appel SetLastWriteTime
, et je ne suis pas vraiment sur les horodateurs sur les fichiers, j'ai remplacé l'appel ExtractToDirectory
à ce qui suit :
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);
}
}
}
}
où pkgFile
est le fichier zip à lire et pkgDir
est le répertoire pour extraire à. Cela semble fonctionner sans problème.
Je ne sais toujours pas pourquoi le SetLastWriteTime
échoue en ExtractToDirectory
, cependant. Mais cette solution de contournement semble être suffisante pour mes besoins.
Hmm, non, c'est un problème environnemental. Premier lieu à toujours démarrer: désactivez le produit anti-programme malveillant installé et réessayez. –
@HansPassant, si tel était le cas alors pourquoi cela fonctionnerait-il dans .Net Core 1.1? – melston
La corrélation n'implique pas de causalité. Le plus évident en réalisant que la version .NETCore ne change pas en redémarrant votre machine. –