2017-09-26 3 views
0

J'ai un fichier zip avec un fichier csv à l'intérieur. J'utilise le code suivant pour lire le fichier:Rechercher Type de codage de DeflateStream

using (ZipArchive zipArchive = ZipFile.OpenRead(filePath)) 
    { 
    var zipArchiveEntry = zipArchive.GetEntry("File.csv"); 
    var zipEntry = zipArchiveEntry.Open(); 
... 
    } 

Le ZipEntry est de type System.IO.Compreesion.Deflatestream.

J'ai essayé d'utiliser StreamReader.CurrentEncoding, mais sa valeur de codage est incorrecte.

J'utilise la solution this maintenant,

this.GetFileEncoding(zipEntry) 

mais se NotSupportedException à fileStrem.Length.

Comment puis-je trouver le bon encodage de zipEntry (File.csv)?

+1

Vous devez extraire (dézipper, voir [msdn] (https://msdn.microsoft.com/en-us/library/hh485716(v=vs.110).aspx)) fichier, pas de flux de décodage. – Sinatr

+0

Non autorisé à extraire et enregistrer le fichier sur le disque :( – lerner1225

+0

Il devrait être possible d'extraire en flux de mémoire par exemple, voir [this] (https://stackoverflow.com/a/10599797/1997232) (c'est la méthode de compression, shouldn – Sinatr

Répondre

0

Pourvu que vous pouvez assurer que le fichier est en fait un fichier cvs puis il suffit d'utiliser un lecteur de flux pour obtenir le contenu du flux de l'entrée lors de l'ouverture

using (ZipArchive archive = ZipFile.OpenRead(filePath)) { 
    var entry = archive.GetEntry("File.csv"); 
    if (entry != null) { 
     using (var reader = new StreamReader(entry.Open())) { 
      var csv = reader.ReadToEnd(); 
     } 
    }  
}