swuser
Goto Top

Einige Unterordner löschen, einige nicht mit Visual Basic 2008 Express

Hallo Comunity!

Ich habe folgendes Problem:

Ich habe einige automatisch erstellte Archivordner. Diese enthalten Unterordner die nach dem entspr. Monatsdatum benannt werden (bspw: 06-2010).
Jetzt möchte ich mit Visual Basic 2008 die alten Ordner löschen. Es sollen aber die 6 aktuellsten Monate nicht gelöscht werden.
Diese habe ich folgendermaßen herausgefiltert:

Dim a As String = Date.Today.ToString("M-yyyy")
Dim b As String = Date.Now.Month.ToString
Dim c As String = b - 5 & Date.Today.ToString("-yyyy")
Dim d As String = b - 4 & Date.Today.ToString("-yyyy")
Dim ee As String = b - 3 & Date.Today.ToString("-yyyy")
Dim f As String = b - 2 & Date.Today.ToString("-yyyy")
Dim g As String = b - 1 & Date.Today.ToString("-yyyy")


Löschen würde ich so:
IO.Directory.Delete(Pfad, True)

Wie kann ich dort jetzt die Ausnahmen einfügen? Bspw: IO.Directory.Delete(Pfad, Ausgenommen a c d ee f g, True)

Ich hoffe, dass jemand mein "Problem" versteht. face-wink
Ich bin auch für andere Lösungsvorschläge offen!

Gruß
Felix

Content-Key: 156493

Url: https://administrator.de/contentid/156493

Printed on: April 16, 2024 at 09:04 o'clock

Member: SlainteMhath
SlainteMhath Dec 07, 2010 at 10:34:02 (UTC)
Goto Top
Moin.

du musst die Verz.-Ebene über deinem Pfad durchlaufen und alles löschen was nicht deinen Kriterien entspricht:
.Etwa so:
for each dir as ... in io.GetDirectories(Pfad)
  if dir.path <> c and dir.path <> d..... then
    io....delete(dir,true)
  end if
next

Genauen Syntax btw Klassennamen musst du dir selbst raussuchen, hab z.Zt. kein VS installietr.

lg,
SLainte
Member: bastla
bastla Dec 07, 2010 at 10:51:15 (UTC)
Goto Top
... oder, da die Ermittlung von c, d, e, ... ohnehin ziemlich fragwürdig ist (ungetesteter Ansatz):
Dim i as Integer, Excl As String = "#"  
For i = -5 To 0
    Excl = Excl & DateAdd(DateInterval.Month, i, Date.Today).ToString("M-yyyy") & "#"  
Next
Dim Folder, FolderName As String
For Each Folder In IO.Directory.GetDirectories("D:\Archiv")  
    FolderName = Mid(Folder, InStrRev(Folder, "\") + 1)  
    If InStr(Excl, "#" & FolderName & "#") = 0 Then IO.Directory.Delete(Folder, True)  
Next
Dem Beispiel "06-2010" entsprechend wäre übrigens die Formatierung mit "MM-yyyy" passender ...

BTW: Die Schreibweise "M-JJJJ" (oder auch "MM-JJJJ") für die Monatsordner finde ich suboptimal - abgesehen von der besseren Sortierbarkeit würde sich mit "JJJJ-MM" das Ganze darauf reduzieren, den String für den ersten nicht zu löschenden Monat zu ermitteln und danach einfach per
If FolderName < EntsprechenderMonat Then ...
zu vergleichen.

Grüße
bastla
Member: SWuser
SWuser Dec 07, 2010 at 13:26:42 (UTC)
Goto Top
Danke euch beiden! Hab es hinbekommen.

@bastla: Die Namenskonvention der Ordner ist leider "historisch gewachsen". Da auf diese Ordner noch einige andere Prozesse zugreifen ist es sehr mühsehlig dies umzustellen. Ich gebe dir aber recht.