2017-10-03 6 views
-1

J'essaie de lire un fichier dans un fichier zip pour vérifier si ce fichier contient une certaine chaîne. Mais je peux sembler obtenir le "fichier" (flux de mémoire) dans une chaîne afin de le rechercher. Lorsque j'utilise le code suivant "stringOfStream" est toujours vide, qu'est-ce que je fais mal? Le lecteur a toujours une longueur et l'octet de lecture renvoie des nombres différents.Conversion du flux de mémoire DotNetZip en chaîne

 using (ZipFile zip = ZipFile.Read(currentFile.FullName)) 
     { 
      ZipEntry e = zip[this.searchFile.Text]; 

      using (MemoryStream reader = new MemoryStream()) 
      { 
       e.Extract(reader); 
       var stringReader = new StreamReader(reader); 
       var stringOfStream = stringReader.ReadToEnd(); 
      } 

     } 

Merci

+2

Je voudrais essayer de définir la position du flux à 0 avant d'appeler 'ReadToEnd'. –

+0

Je crois que Florent B. est correct, basé sur la réponse ici: https://stackoverflow.com/questions/13887538/how-to-use-dotnetzip-to-extract-xml-file-from-zip –

Répondre

1

Je pense que lorsque vous appelez extrait la position du flux va à la fin du fichier, vous devez repositionner à nouveau pour obtenir les données.

Pouvez-vous essayer s'il vous plaît:

using (ZipFile zip = ZipFile.Read(currentFile.FullName)) 
{ 
      ZipEntry e = zip[this.searchFile.Text]; 

      using (MemoryStream reader = new MemoryStream()) 
      { 
       e.Extract(reader); 
       reader.Position = 0; 
       var stringReader = new StreamReader(reader); 
       var stringOfStream = stringReader.ReadToEnd(); 
      } 

    } 

Vérifiez si cela fonctionne ou non.

+1

parfois des solutions sont si désespérément simple! Merci!! – chrispepper1989

+0

est-ce que quelqu'un sait si ZipFile.Read (currentFile.FullName) verrouille le fichier? ou peut-il encore être écrit aussi? – chrispepper1989