VB.Net - Ordner rekursiv löschen - Problem

bleifresser

Mitglied
Hallo,

es gibt zwar einen (oder mehrere Beiträge?) zu diesem Thema, aber leider war noch keine Lösung für mein Problem.

Das Szenario:

Ich öffne eine PPT Datei und lasse die Presentation als JPG Dateien speichern. Dabei legt PowerPoint einen Ordner an und speichert die JPEG Dateien darin. Nachdem die JPEG's von meinem Programm umkopiert wurden, soll der Ordner gelöscht werden.
Hier ein wenig Code ;)
Code:
oPowerPoint = CreateObject("PowerPoint.Application.9") 
[...] 
oPowerPoint.ActivePresentation.SaveAs("C:\Temp\" + folderName, PowerPoint.PpSaveAsFileType.ppSaveAsJPG)
 [...]  
Dim tempFolder As New DirectoryInfo("C:\Temp\" + folderName) 
[...] 
Directory.Delete(tempFolder.FullName, True)

folderName ist ein String, in dem nur der reine Ordnername steht. Es funktioniert auch alles, bis der Ordner gelöscht wird. Es sind z.B. 4 Dateien in diesem Ordner, es werden aber nur 3 gelöscht und dann bekomm ich eine NullPointer Exception.
Hier die Fehlermeldung:
Code:
Eine nicht behandelte Ausnahme des Typs 'System.NullReferenceException' ist in mpERP Programmeditor.exe aufgetreten.

Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Wenn ich versuche den Debugger mir die Stelle im Code anzeigen zu lassen, bekomm ich die Meldung, dass dafür keine Code vorhanden ist.

Ist mir ein Rätsel. Weiß jemand woran das liegen kann ? Ich schreib noch nicht lange Programme in VB.Net.

MfG Frank
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Hallo Bleifresse,

Drei Fragen:

1) Powerpoint geschlossen und wieder freigegeben?
2) Besitzt deine NullReferenceException eine InnerException die vielleicht etwas mehr aussagt?

3) Schon mal den Debugger angeworfen um zu sehen wo genau der Fehler passiert?
 

bleifresser

Mitglied
Code:
oPowerPoint.ActivePresentation.SaveAs("C:\Temp\" + folderName, PowerPoint.PpSaveAsFileType.ppSaveAsJPG)
oPowerPoint.ActivePresentation.Saved = True
oPwerPoint.ActivePresentation.Close()
oPowerPoint.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(oPowerPoint)
oPowerPoint = Nothing

Das zu Frage 1 und zu Frage 2 & 3 siehe oben. (Ich habe den original Beitrag nochmal geädert)

MfG Frank
 

Norbert Eder

Erfahrenes Mitglied
Was ich gerade gesehen hab:

oPowerPoint.ActivePresentation.SaveAs("C:\Temp\....

Das kann nicht funktionieren. Genauso bei DirectoryInfo.Delete. Entweder \\ verwenden, oder @"C:\Temp"...
 

bleifresser

Mitglied
Ok, danke.

Aber daran lag es nicht. Ich hab den Fehler gefunden:

Ich habe die Bilder als Imageobjekte genutzt und die Objekte nicht wieder freigegeben. Mit Image.dispose() läuft das nun.

Trotzdem Danke.

P.S. Ich habe gerade nochmal in mehreren Büchern nachgeschaut und da sind alle Pfadangaben mit "C:\Temp" angegeben und nicht mit "C:\\Temp". Es funktioniert auch bei mir.
 
Zuletzt bearbeitet: