Avatar billede sukos Juniormester
13. marts 2005 - 17:24 Der er 6 kommentarer og
1 løsning

En opendir() som viser underdirs+filer

Hej
Jeg er doven, (vrøvl, har ikke så meget tid, (+ det løse)), og mangler en funktion som læser et dir, viser filnavne ud fra navn, sort(filnavn), og derefter viser underdirs/filnavne, hvis der er nogen. (stadig sorteret efter navn)

Har lige brugt tid på at finde ud af at læse et dir igennem for filer og underdirs. Men der er ikke noget som lykkes helt!

Antallet af underdirs er jo ukendt.

Illustration:

"startdir" som læses igennem, er defineret som en absolut sti, f.eks.
$path = "c:/dirnavn/";

//Først vises filer i "$path":
filnavn_1
filnavn_2

// Derefter underdirs til "$path":
    underdir_1: (underdir til "$path")
    fil_1
    fil_2

    underdir_2: (underdir til "$path")
    fil_1

        sub_under_dir (underdir til  "$path"/underdir_2/"):
        fil_1
        fil_2

Det er væsentligt at filer og dirnavne sorteres efter navn og at filer vises først, derefter evt. under dirs!!!
Avatar billede sukos Juniormester
13. marts 2005 - 17:27 #1
Som detalje,
Du får et velment ord med på http://users.showsource.dk :O)
Avatar billede detox Nybegynder
13. marts 2005 - 17:36 #2
Måske i den her stil:

<?
$mappe = "c:/dirnavn";
$liste = array($mappe);
visMapper($mappe, $liste);
sort($liste);
foreach ($liste as $sti) {
    echo "<p><b>$sti:</b></p>";
    $filer = visFiler($sti);
    if (is_array($filer)) {
        sort($filer);
        echo "<p>";
        foreach ($filer as $fil) {
            echo "$fil<br />";
        }
        echo "</p>";
    }
}

function visFiler($dir) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if (is_file("$dir/$file")) {
            $out[] = $file;
        }       
    }
    $d->close();
    return $out;
}

function visMapper($dir, &$out) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if ($file != '.' && $file != '..') {
            if (is_dir("$dir/$file")) {
                $out[] = "$dir/$file";
                visMapper("$dir/$file", $out);
            }       
        }
    }
    $d->close();
}
?>
Avatar billede detox Nybegynder
13. marts 2005 - 17:39 #3
'visFiler' skal måske lige tjekke for tom variabel:

function visFiler($dir) {
    $d = dir($dir);
    while (false !== ($file = $d->read())) {
        if (is_file("$dir/$file")) {
            $out[] = $file;
        }       
    }
    $d->close();
    if (!empty($out)) return $out;
}
Avatar billede sukos Juniormester
13. marts 2005 - 17:42 #4
jahh, der var lige en "out" fejl, men:
damn:smid svar!!!
Avatar billede detox Nybegynder
13. marts 2005 - 17:43 #5
Yes yes :O)
Avatar billede sukos Juniormester
13. marts 2005 - 17:44 #6
Takker !!!
Avatar billede detox Nybegynder
13. marts 2005 - 17:46 #7
Velbekommen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester