Michael Tyssen: Verzeichniss als auswahl darstellen

Ich möchte Verzeichnisse mit deren Namen darstellen können.

Mit Dateinen soll das so gehen:

opendir(DIR, $verzeichnis) or die "kann Verzeichnis nicht lesen $!";
while (defined($file = readdir(DIR))) {
print "<a href="$file">$file</a><br>";
}
closedir(DIR);

Wie mache ich das jetzt mit Verzeichnisse?

Gruß
Tyssen

  1. hi!

    Mit Dateinen soll das so gehen:
    opendir(DIR, $verzeichnis) or die "kann Verzeichnis nicht lesen $!";
    while (defined($file = readdir(DIR))) {
    print "<a href="$file">$file</a><br>";
    }
    closedir(DIR);
    Wie mache ich das jetzt mit Verzeichnisse?

    Genauso. Verzeichnisse sind auch nichts anderes als etwas speziellere
    Dateien. Der obige Codeabschnitt gibt also nicht nur die Dateien,
    sondern auch schon die Unterverzeichnisse aus.

    Wenn du nur die Unterverzeichnisse ausgeben willst, könntest du zum
    Beispiel noch eine Anweisung in die Schleife einbauen, die für jeden
    Eintrag überprüft, ob es ein Verzeichnis ist:

    if (-d $file) {
        print $file, "\n";
    }

    bye, Frank!

    1. Ich danke dir Frank,

      manchmal sieht man den Wald vor lauter Bäume nicht.

      jetzt muß ich nur noch die Anzeigen der Verzeichnisse drüber wegbekommen: . ..

      Einen Dateitestoperator dafür ist bei selfhtml nicht gelistet oder ich habe es nicht gefunden.

      Gruß
      Tyssen

      1. Einen Dateitestoperator dafür ist bei selfhtml nicht gelistet
        oder ich habe es nicht gefunden.

        http://selfhtml.teamone.de/cgiperl/funktionen/dateiverwaltung.htm#dateitest

      2. Hi!

        jetzt muß ich nur noch die Anzeigen der Verzeichnisse drüber wegbekommen: . ..

        @dirs = grep(!/^..?$/, @dirs);
        oder
          use File::Spec ();
          @dirs = grep(-d, File::Spec->no_upwards(readdir(DIR)));
        oder
          print($file) if (-d($file) && $file !~ /^..?$/);
        oder
          ...

        TA(S)MWTDI (there are (so) many ways to do it)

        So long

  2. Hi Tyssen,

    Wie mache ich das jetzt mit Verzeichnisse?

    da Du als Kontext nicht "Perl", sondern "CGI" angegeben hast:
    Möchtest Du auf diese Weise "Directory Browsing" nachprogrammieren?

    Wenn ja, dann weicht meine Antwort von derjenigen ab, die Frank bereits
    gegeben hat.
    In diesem Falle würdest Du ebenfalls einen Link (<a href>) ausgeben, aber
    sinnvollerweise nicht auf das Verzeichnis, sondern - wiederum auf Dein
    CGI-Skript selbst! Wobei Du diesem dann den Pfad zu diesem Verzeichnis
    (und zwar möglichst nur einen _relativen_ Pfad - absolute Pfade über den
    URL durchschleifen ist "böse") als CGI-Parameter übergibst.

    Auf diese Weise kannst sich der Benutzer Deines Skripts von Verzeichnis
    zu Verzeichnis 'durchhangeln'. Wenn Du auch wieder 'nach oben' willst,
    dann mußt Du die Einträge '.' und '..' sonderbehandeln: '.' wirst Du
    nicht brauchen, aber den tatsächlichen Wert von '..' mußt Du explizit
    ausrechnen (eine Verzeichnisebene aus Deinem bisherigen relativen Pfad
    entfernen).

    Viele Grüße
          Michael