daten löschen VB 

Status
Für weitere Antworten geschlossen.

gessi86

Registered +
Registriert
Sep. 2007
Beiträge
139
hallo,

mein problem ist folgendes:

ich habe eine ziemlich komplexe ordnerstruktur und möchte bestimmte dateien, egal wie oft sie vorkommen in allen ordnern löschen.

betroffen dürfen jedoch nur dateien und ordner sein, die auf gleicher ebene, oder hinter dem ausgeführten script liegen.

könnte in vb6 geschrieben werden, ein standard script ohne oberfläche würde aber auch reichen.

kann mir jemand helfen?

hauptproblem bei vb6 war bisher dass
a: die unterordner nicht berücksichtigt wurden
b: alles abgebrochen wurde, wenn eine datei garnicht vorhanden war. (das weiß ich vorher nicht)
 
naja, nicht wirklich...
ich will ja nicht alles löschen, sondern nur bestimmte dateien.

mein versuch sah etwa so aus: (funktioniert leider nicht)



Private Sub Command1_Click()
Unload Me
End Sub

Private Sub command2_click()

'Pfad durchsuchen
Dim xpath As String

'gesuchte Files keine Platzhalter
Dim xSF As String
Dim xfn As Long

'Datenfeld zum Speichern der Liste
ReDim xArray(0) As String

'Array index
Dim xln As Long
Dim xi As Long

'Pfad durchsuchen
xpath = "App.Path"

'gesuchter Filename enthält folgenden String :
xSF = ".prot"

xSF = UCase(xSF)

'Liste speichern Datenfeld
Call xDirArray(xpath, xArray(), xln, xSF)

'Ausgabe Array inhalt z.B.:
For xi = 1 To UBound(xArray)
Debug.Print xArray(xi)
Next xi
End Sub

Public Sub xDirArray(xpath As String, xArray() As String, xln As _
Long, xSF As String)
Dim xa As Long
Dim xDir As String
ReDim xt(0) As String
Dim xi As Long

xDir = Dir$(xpath & "\*.*", vbNormal Or vbReadOnly Or vbHidden _
Or vbSystem Or vbVolume Or vbDirectory Or vbArchive)

'"\*.*" darf nicht verändert werden
xa = 0

If Len(xDir) > 0 Then
xt(0) = xDir
End If

Do While Len(xDir) > 0
xDir = Dir
If Len(xDir) > 0 And Not xDir = "." And Not xDir = ".." Then

xa = xa + 1
ReDim Preserve xt(xa)
xt(xa) = xDir
End If
Loop

For xi = 0 To xa
If Len(xt(xi)) = 0 Then
Exit For
ElseIf Not xt(xi) = "." And Not xt(xi) = ".." Then
If Len(Dir(xpath & "\" & xt(xi), vbNormal Or vbReadOnly _
Or vbHidden _
Or vbSystem Or vbVolume Or vbDirectory Or vbArchive)) _
> 0 Then

'vbDirectory =16
If Not (GetAttr(xpath & "\" & xt(xi)) And _
vbDirectory) = vbDirectory Then

If Len(xSF) > 0 Then
If InStr(1, UCase(xt(xi)), xSF) > 0 Then
xln = xln + 1
ReDim Preserve xArray(xln)
xArray(xln) = xpath & "\" & xt(xi)
End If
End If
Else
Call xDirArray(xpath & "\" & xt(xi), xArray(), _
xln, xSF)
End If
End If
End If
Next xi


End Sub
 
Tut mir leid aber da kann ich dir auch nicht weiter helfen.
letzte lösung bestimmte Ordner die leer sind löschen:

Max = GetAllFiles(LCase(Text1.Text), Such, Files, _
(Check1.Value = Checked))


Sub DeleteEmptyFolder(ScanPfad)
Set MyFSO = CreateObject("Scripting.FileSystemObject")

Set PathObject = MyFSO.GetFolder(ScanPfad)
Set SubFolders = PathObject.SubFolders
For Each SubFoldersNow In SubFolders
Set FileObject = SubFoldersNow.Files
Set SubSubFolders = SubFoldersNow.SubFolders
fc = FileObject.Count
pc = SubSubFolders.Count

On Error GoTo errordel
If fc = 0 And pc = 0 Then
SubFoldersNow.Delete
Else
DeleteEmptyFolder (SubFoldersNow.ParentFolder + "\" + SubFoldersNow.Name)
End If
Next

Set SubFolders = PathObject.SubFolders
For Each SubFoldersNow In SubFolders
Set FileObject = SubFoldersNow.Files
Set SubSubFolders = SubFoldersNow.SubFolders
fc = FileObject.Count
pc = SubSubFolders.Count
If fc = 0 And pc = 0 Then
SubFoldersNow.Delete

End If

Next
End Sub
 
NEIN
ich möchte keine leeren ordner löschen!

ich möchte dateien, mit bestimmten namen/dateiendungen löschen!
die sich irgendwo in einem geflecht von unterordnern befinden.
die doppelt und 10fach vorkommen können, oder auch garnicht.

die suche nach diesen dateien soll im verzeichnis des scripts beginnen und von dort aus aufwärts.
nicht darunter und nicht daneben.

sonst NICHTS:rolleyes:
 
es ist ja schön, dass du auf biegen und brechen versuchst mir zu helfen...

aber benutze doch bitte die editieren funktion anstatt 3 beiträge hintereinander zu schreiben.

hat auch irgendeiner deiner links einen hinweis für mich, der mir weiterhilft?!
 
du könntest das rekursiv programmieren, ich weiss aber nicht wie das mit vb geht (kann nur java, C/C++)

also deine Funktion holt sich den Inhalt des Verzeichnisses, liest einen Eintrag nach dem andern wenn es ein verz. ist ruft die Funkton sich selber auf mit dem neuen Verz., wenn es kein Verz. ist wird auf deine gew Datei getest und dann gelöscht.
 
hört sich gut an, jedoch ist das dann von der laufzeit her nicht grade toll oder?
ich muss ja 100000 schleifen machen bis ich alle unterordner gefunden hab?!

und dann bleibt immernoch die frage nach dem WIE mache ich das ;-)

aber danke für den hinweis
 
ok,
danke für euere hilfe!
ich denke damit krieg ichs zum laufen!

damit ist das hier ersmal erledigt ;-)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten