Die FolderItem-Klasse kennt neben ".Item" und ".Child" noch die
Methoden ".TrueItem" und ".TrueChild". Der Unterschied zwischen beiden
ist, dass .Item und .Child Aliasse auflösen – also die Datei/den
Ordner liefern, auf die das Alias verweist –, .TrueItem und .TrueChild
das Alias selbst. Das ist der Grund, warum Du in Deinem Code Aliasse
nicht einfach "aussortieren" kannst: da Du .Item verwendest, ist ein
evtl. Alias bereits aufgelöst.
Am 01.05.2013 um 18:03 schrieb Stefan Mettenbrink:
Ich durchsuche einen Ordner nach einer bestimmten Datei. Um auch die
Unterordner zu berücksichtigen, rufe ich die Routine recursiv auf.
Läuft alles prima.
Jetzt hatte ich einen Anwender, der einen Alias eines
übergeordneten Ordners in einem Ordner erzeugt hat. Prima Schleife.
Die führt nun selbstverständlich zu einem Fehler.
Also einfach auf Alias prüfen und die nicht verfolgen. Funktioniert
bei mir nur leider nicht.
Zum Testen habe ich folgende Struktur erzeugt:
Ordner 0:
Ordner1:
Ordner 2:
Ordner1 <- Alias
Ich bekomme aber nie für das Folderitem ein .Alias=true :-(
Hier die Routine, die ich nutze ("name" ist der Dateiname der
gesuchten
Datei):
Function getFileNew(source as folderItem, name As string) As
folderItem
Dim i as Integer
Dim f as FolderItem
if source<>nil then
f=source
if f<>nil and f.Exists then
f=f.child(name)
if f<>nil then
if Not f.exists then
For i=1 to source.count //go through each item
if source.Exists=true and i<=source.count and
source.item(i).directory then
//it’s a folder
f=getFileNew(source.item(i), name)
if f<>nil then
exit
end
end
next
end
end
end
if f<>nil and f.exists=false then
f=nil
end
end
return f
Exception err
Fehlerbehandlung(err.message,"getFileNew")
Wie kann ich verhindern, dass ich durch einen Alias in eine
Endlosschleife gerate?
Kann ich die StackOverflow-Exception irgendwie abfangen ("Exception
err"
habe ich eingebaut, wird aber nicht angesprungen)?
Gruß, Stefan Mettenbrink.
Gruß,
Christian