2017-11-10 9 views
-1

Ich habe eine C# -Konsolenanwendung, die Excel-Dateikalkulation Anhänge per E-Mail sendet.C# nicht finden den richtigen Dateipfad

Ich habe den Dateipfad in App.config angegeben. Beim Versuch, die Datei zu finden, sucht der Code nach dem richtigen Speicherort. Aber wenn Sie versuchen, die Datei innerhalb der foreach-Anweisung anzuhängen, sucht sie im bin Ordner des Codes.

Was mache ich hier falsch?

DirectoryInfo dir1 = new DirectoryInfo(ConfigurationManager.AppSettings.Get("FilePath")); 
     FileInfo[] folderFiles = null; 
     folderFiles = dir1.GetFiles(); 



    foreach (FileInfo aFile in folderFiles) 
      { 


       message.Attachments.Add(new Attachment(aFile.Name)); 
      } 
+2

Welchen Wert hat 'aFile.Name' in der Schleife? Schau es dir im Debugger an. Es gibt keinen Weg, oder? Wenn Sie einen Pfad angeben, wird der von Ihnen angegebene Pfad angezeigt. Wenn nicht, tut es das nicht. Was schlägt dir das vor? –

+0

Ich habe den FilePath des Verzeichnisses zur Verfügung gestellt, in das er gesucht hat. Dann frage ich in der ForEach-Schleife nach den Dateien im Verzeichnis. – SaraDob

+1

Verwenden Sie das Überwachungsfenster im Debugger, um den Wert von aFile.Name zur Laufzeit zu untersuchen. Setzen Sie einen Haltepunkt und verwenden Sie den Debugger. Ich verstehe schon genau, was du machst und was du fälschlicherweise für deinen Code hältst. Ich versuche dir zu helfen, genau zu verstehen, was du machst, aber du musst mitmachen. –

Antwort

1

Sie müssen verwenden aFile.FullName (den vollständigen Pfad enthält) statt aFile.Name (nur der Dateiname). Wenn ein Befehl nicht Ihren Erwartungen entspricht, sollten Sie die Dokumentation überprüfen.

Alternativ können Sie es einfacher machen:

string dir1 = ConfigurationManager.AppSettings.Get("FilePath"); 
foreach(string aFile in Directory.EnumerateFiles(dir1)) 
{ 
    message.Attachments.Add(new Attachment(aFile)); 
} 

als Directory.EnumerateFiles einfach die vollständige Dateinamen zurückgibt und Sie würden über nicht tun, so denken haben (zum Beispiel durch Path.GetFileName verwenden) sonst zu tun.

Verwandte Themen