2016-11-16 5 views
0

Mit MailKit in .NET CORE ein attachement geladen werden können:Anbringen einer Datei aus .Zip Ordner

bodyBuilder.Attachments.Add(FILE); 

Ich versuche, eine Datei aus dem Inneren einer ZIP-Datei anhängen mit:

using System.IO.Compression;  

string zipPath = @"./html-files.ZIP"; 
using (ZipArchive archive = ZipFile.OpenRead(zipPath)) 
{ 
    // bodyBuilder.Attachments.Add("msg.html"); 
      bodyBuilder.Attachments.Add(archive.GetEntry("msg.html")); 
} 

Aber es hat nicht funktioniert, und gab mir APP\"msg.html" not found, was bedeutet, dass es versucht, eine Datei mit dem gleichen Namen aus dem Verzeichnis root anstelle der zipped eine zu laden.

+0

Das einzige, was ich jetzt vorschlagen kann, ist nur versuchen, sorgfältig durch die Anweisungen des Programms zu debuggen, sehen Sie sich die Werte der Variablen. Zum Beispiel sollten Sie dem Watch-Fenster in VS die Variable 'archive' hinzufügen und deren Eigenschaften untersuchen - insbesondere 'Entries'. – Deilan

Antwort

3

bodyBuilder.Attachments.Add() hat keine Überladung, die einen ZipArchiveEntry erfordert, so dass archive.GetEntry("msg.html") keine Chance hat zu arbeiten.

Am wahrscheinlichsten ist, was passiert ist, dass der Compiler den ZipArchiveEntry auf eine Zeichenfolge wirft, die zufällig APP\"msg.html" ist, weshalb Sie diesen Fehler erhalten.

Was Sie tun müssen, ist den Inhalt aus dem Zip-Archiv extrahieren und fügen Sie dann , dass der Liste der Anlagen hinzufügen.

using System.IO; 
using System.IO.Compression; 

string zipPath = @"./html-files.ZIP"; 
using (ZipArchive archive = ZipFile.OpenRead (zipPath)) { 
    ZipArchiveEntry entry = archive.GetEntry ("msg.html"); 
    var stream = new MemoryStream(); 

    // extract the content from the zip archive entry 
    using (var content = entry.Open()) 
     content.CopyTo (stream); 

    // rewind the stream 
    stream.Position = 0; 

    bodyBuilder.Attachments.Add ("msg.html", stream); 
} 
+0

sieht gut aus, wird es morgen testen und bestätigen Sie, ich bin neu in C# und lese nur wenig über 'memoryStream' möchte dich fragen, was ist, wenn ich mehr als eine Datei habe, soll ich für jeden einzelnen Dampf erzeugen, oder addiere sie zusammen in einem einzigen Dampf, wenn ja, B wie kann ich den richtigen Dampf für jede Datei lesen, und was ist mit Speicherreinigung, wenn der Strom aus dem Speicher entfernt wird, soll ich es manuell entfernen, danke –

+0

Ihre Follow-up-Fragen Beantworte deine erste Frage. Es ist unmöglich, einen einzelnen Stream zu verwenden. Sie benötigen 1 Stream pro Datei. – jstedfast

Verwandte Themen