Verzeichnis nicht löschbar? (etwas länger!)

30/11/2009 - 19:51 von Wolfgang Bußmann | Report spam
Hallo Newsgroup,

ich schlage mich jetzt schon seit einiger Zeit damit herum, dass ich ein
Unterverzeichnis nicht löschen kann.

Die Fehlermeldung lautet:
Laufzeitfehler '75": Fehler beim Zugriff auf Pfad/Datei

Dieser Fehler tritt jedoch nur auf, wenn ich vor dem Löschen eine
Datenbankabfrage ausführe. Ohne vorherige Datenbankabfrage wird das
Verzeichnis einwandfrei gelöscht.

Mit dem Programm "Unlocker.exe" konnte ich nach der Datenbankabfrage
einige offene Handles auf das Unterverzeichnis bzw. die Datei
feststellen. Leider weiß ich nicht woher diese kommen und wie ich diese
wieder "los werde". Ich vermute, dass diese offenen Handles das Löschen
verhindern. Aber warum? Wo liegt mein Denk-/Ausführungsfehler?

Zum Testen habe ich folgendes Programm geschrieben:
Grundlagen: VB6 mit SP6, DAO 3.6, XP mit SP3

Formular mit zwei Commandbutton und einem Label
cmdDatenAbrufen = Button1
cmdVerzeichnisLoeschen = Button2
lblLabel1 = Label
Unterverzeichnis im Programmordner = \Unterordner
Dbase3-Testdatei: = Testdatei.dbf
Feldname: Feld1/String

Es wàre schön, wenn jemand mir erklàren könnte, wie ich das Löschen des
Verzeichnisses irgendwie hinbekomme und wo "mein" Fehler liegt.

Vielen Dank an Alle im voraus!

Wolfgang Bußmann

PS:
Wird das Programm mehrfach innerhalb der IDE aufgerufen, bleiben die
Handles erhalten!


***********************************************
Option Explicit

Private GlobalPfad As String

Private Const IDYES = 6
Private Const IDNO = 7

Private Sub cmdDatenAbrufen_Click()

Dim dummy As String
Dim filenummer As Long
Dim wert As Byte

Dim WS As DAO.Workspace
Dim DBVANr As DAO.Database
Dim RSVANr As DAO.Recordset

Set WS = DAO.Workspaces(0)

If Dir$(GlobalPfad & "\Unterordner\Testdatei.DBF") <> "" Then
'nach diesem Dir$ existiert bereits ein Handle?

Set DBVANr = WS.OpenDatabase(GlobalPfad & "\Unterordner", False,
False, "dBASE III;")
Set RSVANr = DBVANr.OpenRecordset("SELECT * FROM Testdatei.DBF")
If (Not RSVANr.EOF) And (Not RSVANr.BOF) Then
lblLabel1.Caption = RSVANr.Fields("Feld1").Value
End If
'nach diesen Befehlen existieren 7! Handle's auf den Unterordner
und 1 Handle auf die Datei Testdatei.dbf?
RSVANr.Close
DBVANr.Close

Set RSVANr = Nothing
Set DBVANr = Nothing

End If

End Sub

Private Sub cmdVerzeichnisLoeschen_Click()
Dim lngResult As Long
Dim VerzeichnisName As String
Dim Dateiname As String

'Wird dieser Code ohne vorherige Datenbankabfrage ausgeführt, làsst
sich der Unterordner löschen!
'Ansonsten kommt folgende Fehlermeldung:
'Laufzeitfehler '75": Fehler beim Zugriff auf Pfad/Datei
VerzeichnisName = GlobalPfad
lngResult = MsgBox("Soll das Verzeichnis" & vbCrLf & GlobalPfad &
"\Unterordner" & vbCrLf & _
"wirklich gelöscht werden?", vbDefaultButton2 Or
vbYesNo, "Verzeichnis löschen")
Select Case lngResult
Case IDYES
'Prüfung löschen - vorher prüfen ob vorhanden
If Dir$(GlobalPfad & "\Unterordner", vbDirectory) <> "" Then
Dateiname = Dir$(GlobalPfad & "\Unterordner\*.*")
While Dateiname <> "" 'alle Dateien im Unterordner löschen
Kill GlobalPfad & "\Unterordner\" & Dateiname
Dateiname = Dir$()
Wend
RmDir GlobalPfad & "\Unterordner"
End If
Case IDNO
Exit Sub
End Select

End Sub

Private Sub Form_Load()

GlobalPfad = App.Path
If Mid$(GlobalPfad, 2, 1) = ":" Then
ChDrive Left$(GlobalPfad, 1)
ChDir GlobalPfad
End If

End Sub
 

Lesen sie die antworten

#1 Wolfgang Enzinger
01/12/2009 - 00:33 | Warnen spam
On Mon, 30 Nov 2009 19:51:38 +0100, Wolfgang Bußmann wrote:

ich schlage mich jetzt schon seit einiger Zeit damit herum, dass ich ein
Unterverzeichnis nicht löschen kann.

Die Fehlermeldung lautet:
Laufzeitfehler '75": Fehler beim Zugriff auf Pfad/Datei



Kannst du das Problem mit exakt dem Code, den du hier gepostet hast,
nachvollziehen? Ich nicht.

Der Code scheint mehr ein Beispiel zu sein, denn ...

Set RSVANr = DBVANr.OpenRecordset("SELECT * FROM Testdatei.DBF")



... das hier funktioniert schon nicht, und kann auch nicht funktionieren
(was nicht etwa daran liegt, dass ich keine .\Unterordner\Testdatei.dbf
angelegt hàtte).

Wenn ich das aber ausgebessert habe, funktioniert alles wie es soll,
auch das Löschen.

Also poste mal ein "echtes" Beispiel.

Davon unabhàngig würde ich empfehlen, zum Testen der Existenz einer
Datei nicht Dir$() zu verwenden, sondern sowas wie hier:
http://www.enzinger.net/Filetest.html

Viele Grüsse,
Wolfgang
http://www.enzinger.net

Ähnliche fragen