2016-11-06 4 views
0

Ich versuche, eine benutzerdefinierte Datei ohne Erfolg an eine E-Mail anzuhängen. Der folgende Code ruft eine Batch-Datei auf, die eine verschlüsselte Datei erstellt und dann versucht, diese Datei an eine E-Mail anzuhängen. Die Stapeldatei erstellt die Datei erfolgreich, aber wenn sie versucht, eine Datei anzuhängen, wird sie als nicht vorhanden angezeigt. Ich lese, dass Sie einen Gedächtnispuffer schaffen oder an denselben Faden anschließen müssen, ich versuchte, mit ihm zu denken, aber ich bin im Moment wirklich ratlos. Kann jemand helfen?C#: Eine benutzerdefinierte Datei (.sl) an eine E-Mail anhängen

Code:

   string file = @"C:\EncryptedFile\file.sl"; 

       //EXECUTE BATCHFILE SUPPLYING PARAMETERS TO IT 
       Process process = new Process(); 
       process.StartInfo.Arguments = string.Format("{0} {1} {2} {3}", 
              file, 
              key, 
              doc1, 
              doc2); 
       process.StartInfo.FileName = MyBatchFile; 
       process.StartInfo.UseShellExecute = false; 
       process.StartInfo.CreateNoWindow = true; 
       process.Start(); 

       //attach to email 
       Attachment attachment; 
       attachment = new Attachment(file); 
       mail.Attachments.Add(attachment); 

Fehler:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\EncryptedFile\file.sl'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at System.Net.Mail.AttachmentBase.SetContentFromFile(String fileName, String mediaType) at System.Net.Mail.AttachmentBase..ctor(String fileName) at System.Net.Mail.Attachment..ctor(String fileName)

Dank!

+0

Haben Sie überprüft, indem Sie einen Debug-Punkt setzen (die Ausführung der Batch-Datei anhalten), dass die Datei bereits existiert, wenn der Attachment-Code aufgerufen wird? auch würde ich vorschlagen, zwei Batch-Dateien zu erstellen. Eine besteht darin, die Datei zu erstellen, und die andere besteht darin, sie an die Mail anzuhängen. Sie können die zweite Batch-Datei am Ende der Ausführung der ersten Batch-Datei aufrufen, wobei einige warten müssen, bis die Datei nicht ordnungsgemäß erstellt wird. –

Antwort

1

Die Ausnahme ist ziemlich klar. Dies bedeutet, dass die Datei zum Zeitpunkt der Anlagenerstellung nicht vorhanden war. Ich würde Ihren Code ändern:

  1. warten util Prozess beenden. Ohne es erstellen Sie eine Anlage, bevor die Batchdatei es erstellt.
  2. Überprüfen Sie auf Exit-Code (wenn Ihre Charge unterstützt)
  3. Überprüfen Sie auf Datei vor Anlage erstellen, um die Situation zu behandeln, wenn Batch aus irgendeinem Grund keine Datei erstellt.
+0

Stellen Sie Code zur Verfügung, um zu zeigen, wie das geht? – Prisoner

+0

Hey danke Mann, Nummer 1 war einfacher zu implementieren und es hat funktioniert. Alles, was ich brauchte, war einen Prozess zu platzieren. WaitForExit(); bevor der Anhang hinzugefügt wurde und es funktioniert! Ich würde Ihren Kommentar als Antwort markieren, aber ich habe nicht genug Rep. – Raidenlee

+0

Weißt du, wie man "wartet" auf die Mail, die send() beendet und dann weitergeht? Ich versuche, die verschlüsselte Datei zu löschen, nachdem die Mail gesendet wurde, aber ich bekomme eine Fehlermeldung "Datei wird verwendet" (Offensichtlich versuche ich die Datei zu löschen, während die Mail sie benutzt, also muss ich warten oder so). – Raidenlee

Verwandte Themen