WinFuture-Forum.de: Ordner Auslesen, Als Xml Speichern - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Ordner Auslesen, Als Xml Speichern tiefe beschränken


#1 _-=[J]=-_

  • Gruppe: Gäste

geschrieben 05. August 2008 - 18:11

Dat hier hab ich und es geht auch. Ich würd nur gerne die Tiefe beschränken
d.h. ich hab z.B. 5 unterordner ... es soll aber nur der Inhalt bis zum 2. gelistet werden oder so. wie mach ich das ?
oder muss ich das bei der abfrage der XML beachten ?

<?php

function read_dir($dir) {
	$path = opendir($dir);
	while (false !== ($file = readdir($path))) {
		if($file!="." && $file!="..") {
			if(is_file($dir."/".$file)){
				$files[]=$file;
			} else {
				$dirs[]=$dir."/".$file;
			}
		}
	}
	if($dirs) {
		natcasesort($dirs);
		foreach($dirs as $fdir) {
			$name = substr($fdir, strlen($dir)+1);
			echo"	<node label=\"$name\" >\n";
			read_dir($fdir);
			echo"	</node>\n";
		}
	}
	if($files) {
		natcasesort($files);
		foreach ($files as $file) {
			echo "	<node label=\"$file\" src=\"$dir/$file\" />\n";
		}
	}
	closedir($path);
}
$path="..\PATH";
echo"<?xml version=\"1.0\"?>\n\n<tree>\n";
read_dir($path);
echo"</tree>";
?>

0

Anzeige



#2 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 05. August 2008 - 18:24

Übergib an read_dir einfach eine Zahl, die die Tiefe darstellst. Beím Funktionsaufruf erniedrigst du sie und übergibst diese an die Rekursion. Wenn die Zahl dann Null ist, soll sich die Funktion nicht mehr selber aufrufen.

Gruß,
Stefan
0

#3 _-=[J]=-_

  • Gruppe: Gäste

geschrieben 06. August 2008 - 18:55

	if($dirs) {
		natcasesort($dirs);
		if($depth > 0){ 
			foreach($dirs as $fdir) {
				$name = substr($fdir, strlen($dir)+1);
				echo"	<node label=\"$name\" >\n";  
				read_dir($fdir, --$depth );  
				echo"    </node>\n";  
			}  
		}
	}

Also so wird die Tiefe im ersten Ordner beschränkt (ich übergebe $depth).
und der nachfolgende code listet mir immer nur die ersten beiden Ordner.
wie bekomm ich die tiefe des scans geregelt... das er mir z.B. nur jeweils die unterordner
des hauptordners liefert... und als nächstes deren unterordner noch mit...



	if($dirs) {
		natcasesort($dirs);
			foreach($dirs as $fdir) {
				$name = substr($fdir, strlen($dir)+1);
								if($depth > 0){ 
				echo"	<node label=\"$name\" >\n";  
				read_dir($fdir, --$depth );  
				echo"	</node>\n";  
			}  
		}
	}

0

#4 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 06. August 2008 - 19:31

Du darfst nicht
read_dir($fdir, --$depth );
machen, sonst wird in der aktuellen Tiefe depth auch verringert.

Der Aufruf muss so aussehen, damit die verbleibende Tiefe auf einem Niveau gleich bleibt:
read_dir($fdir, $depth - 1);
Ansonsten dürfte es schon passen und funktionieren.

Gruß,
Stefan
0

#5 _-=[J]=-_

  • Gruppe: Gäste

geschrieben 06. August 2008 - 22:32

jap, geht... super sache, dann war ich ja garnicht mal so weit entfernt :-)
Dankesehr

und ich merke das beide quelltexte ja eigentlich das gleiche machen...
im einen geht er halt vielleicht in die foreach rein aber macht nix.
naja. mal sehen woran das lag.

Gruß und nochmals Danke
0

#6 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 06. August 2008 - 22:42

Nein, sie machen nicht das gleiche. Denn
read_dir($fdir, --$depth);
bedeutet ja nichts anderes als
$depth = $depth - 1;
read_dir($fdir, $depth);

Aber die Variable darf ja in der aktuellen Funktion nicht verändert werden, sonst gehts in der x-ten foreach-Wiederholung nicht mehr weiter. Sie soll ja in einer Ebene immer konstant bleiben und nur die Ebene darunter soll den um eins niedrigeren Wert übergeben bekommen.

Gruß,
Stefan
0

#7 _-=[J]=-_

  • Gruppe: Gäste

geschrieben 07. August 2008 - 16:34

machen nicht das gleiche --> ich meinte meine beiden codebeispiele :-)
Danke hehe
0

#8 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 07. August 2008 - 18:45

Zitat

--$depth

Dabei fällt mir ein immer Difference between pre-increment and post-increment
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0