2017-04-21 1 views
2

Meine Anwendung ist eine Universal Window Platform-Anwendung. Ich versuche, eine Runtime-Komponente zu implementieren, um einen gezippten Ordner zu dekomprimieren. Eine meiner Anforderungen ist, dass Pfade, die länger als 260 Zeichen sind, bearbeitet werden können.'Konnte Datei oder Assembly System.IO.Compression' auf UWP nicht laden

public static IAsyncActionWithProgress <string> Unzip(string zipPath, string destination) { 
    return AsyncInfo.Run <string> (async(_, progress) => { 
     var zipFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(zipPath)); 

     try { 
      Stream stream = await zipFile.OpenStreamForReadAsync(); 
      ZipArchive archive = new ZipArchive(stream); 
      archive.ExtractToDirectory(destination); 
     } catch (Exception e) { 
      Debug.WriteLine(e.Message); 
     } 
    }); 
} 

Ich habe versucht, meine Methode immer folgende Ausnahmemeldung auszuführen:

System.IO.FileNotFoundException: Could not load file or assembly 'System.IO.Compression, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified. 
    at Zip.Zip.<>c__DisplayClass0_0.<<Unzip>b__0>d.MoveNext() 
    at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine) 
    at Zip.Zip.<>c__DisplayClass0_0.<Unzip>b__0(CancellationToken _, IProgress`1 progress) 
    at System.Thread (~4340) 

I System.IO.Compression mit NuGet hinzuzufügen versucht, aber ich immer noch die gleichen Fehler. Die Zip-Datei und der Zielordner existieren.

Ich habe versucht, mein Projekt auf Visual Studio 2015 statt Visual Studio 2017 zu debuggen und herausgefunden, dass ich System.IO.Compression auf diese Weise verwenden kann, aber es gibt eine Beschränkung für die Länge der Pfade.

Antwort

0

Erstens, durch Testen auf meiner Seite, mit dem neuesten Visual Studio 2017, könnte Ihr Code-Snippet gut mit Dateipfad weniger als 260 Zeichen standardmäßig funktionieren. Wenn Sie einen längeren Pfad als 260 Zeichen verwenden, löst Visual Studio 2017 die Ausnahme aus

System.IO.PathTooLongException: 'Der Dateiname oder die Erweiterung ist zu lang.

Das ist das gleiche wie Visual Studio 2015. SO überprüfen Sie bitte, ob Sie den Namespace korrekt verwenden.

Eine meiner Anforderungen ist, dass Pfade, die länger als 260 Zeichen sind, verarbeitet werden können.

Zweitens wird der Fehler ausgelöst, wenn Sie versuchten, die Datei von GetFileFromApplicationUriAsync Methode zu erhalten. Dies ist also nicht das System.IO.Compression Namespace-Problem, was Sie tatsächlich beheben müssen, ist maximale Pfadlänge Einschränkung, Details bitte Referenz this article. Für weitere Informationen über den zu langen Pfad des Dateipfads, versuchen Sie bitte, auf this thread zu verweisen. Aber sie sind möglicherweise nicht für die UWP-App geeignet.

In der UWP-App können Sie eine FileOpenPicker verwenden, um die Datei abzurufen und die Datei an die Komponente zum Lesen des Dateistroms zu übergeben. Die Dateiauswahl konvertiert den langen Dateinamen in eine Aufnahme wie "xxx-UN ~ 1.ZIP" zum Lesen.

FileOpenPicker openpicker = new FileOpenPicker(); 
openpicker.FileTypeFilter.Add(".zip"); 
var zipfile = await openpicker.PickSingleFileAsync(); 
Stream stream = await zipfile.OpenStreamForReadAsync(); 
ZipArchive archive = new ZipArchive(stream); 
archive.ExtractToDirectory(destination); 

Ich empfehle Ihnen, lange Dateipfad zu vermeiden.

Verwandte Themen