2017-06-28 10 views
1

Ich weiß, dass diese Frage schon ein paar Mal gestellt wurde, aber ich habe alle Antworten überprüft und keine scheint mein Problem zu lösen.Ich kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird.

Ich versuche, Fotos als Anhänge in einer E-Mail zu senden. Also, zuerst, wenn die Person die Fotos auswählt, kopiere ich sie in einen bestimmten Ordner, dann hole ich sie aus diesem Ordner zurück, während ich die Mail sende. Am Ende möchte ich den Ordner löschen, aber er wirft die Ausnahme, die Sie im Titel sehen können. Ich habe bereits überprüft, ich sehe keinen Stream, den ich nicht geschlossen habe (da ich dafür keine Streams verwende), ich bin verloren.

Methode verwende ich die Datei kopieren:

private void Send_Click(object sender, RoutedEventArgs e) 
    { 
     OpenFileDialog ofd = new OpenFileDialog(); 
     DialogResult dialogresult = ofd.ShowDialog(); 

     ///Si l'utilisateur a bien rentré un fichier 
     if (dialogresult == DialogResult.OK || dialogresult == DialogResult.Yes) 
     { 
      string folder = Data.HelperDirectory.getFolderDocumentAndCreate("Devis"); 
      Dialogs.PleazeWait pw = new Dialogs.PleazeWait(); 
      pw.Show(); 

      ///Récupère le nom du fichier que l'utilisateur a envoyé précédemment 
      string file = folder + System.IO.Path.GetFileName(ofd.FileName); 

      ///Ajoute "(1)" au nom du fichier pour éviter les doublons 
      while (File.Exists(file)) 
      { 
       file = file + " (1)"; 
      } 

      ///Copie le fichier dans le répertoire de sauvegardes 
      File.Copy(ofd.FileName, file); 
      pw.Close(); 
     } 
    } 

-Code Teil der Dateien zu erhalten verwendet und sie an die E-Mail:

string folder = Data.HelperDirectory.getFolderDocumentAndCreate("Devis"); 
      string[] files = Directory.GetFiles(folder); 
      foreach(string file in files) 
      { 
       if(!string.IsNullOrEmpty(file)) 
       { 
        mail.Attachments.Add(new Attachment(file)); 
       } 
      } 

Schließlich, wenn ich versuche, den Ordner zu löschen (nach dem Senden der Mail natürlich):

Directory.Delete(folder, true); 

Wenn es helfen kann, das Problem zu lösen, kann ich diesen Code sagen schafft es, die E-Mail zu senden (also übergibt sie den zweiten Teil des Codes), löst aber beim Versuch, den Ordner zu löschen, eine Ausnahme aus. Und zwischen diesen Teilen des Codes wird nichts über Dateien oder Ordner aufgerufen.

Vielen Dank im Voraus für Ihre Zeit und Hilfe!

Antwort

2

Hängt von Ihrem Mail-Typ ab, aber nach dem Senden der Mail können Sie versuchen, das Objekt zu entsorgen.

client.Send(mail); 
mail.Dispose(); 
Verwandte Themen