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




Antwort per Email an