04. november 2002 - 19:33
Der er
16 kommentarer og 1 løsning
størrelse for mappe med undermapper
Hey hvordan kan jeg beregne en mappes størrelse og med alle undermapper??
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
05. november 2002 - 01:14
#1
Du laver en funktion som tager et mappenavn som inputargument og returnerer størrelsen af de filer der ligger i mappen! Derefter skal den bare kalde sig selv rekursivt, hvis den støder på et nyt bibliotek - pseudokode for hvordan det skal hænge sammen er: function FolderSize($folder) { $CurrentFolderSize = 0; åbn folder loop over filer og mapper i $folder if(is_file(nuv. fil/mappe)) { $CurrentFolderSize += filesize(nuv. fil); } else { $CurrentFolderSize += FolderSize($folder/$nuv. mappe); } } return $CurrentFolderSize; }
05. november 2002 - 15:06
#2
jamen tager den ikke kun den angivne mappe + 1 niveau ned...?? hvad nu hvis der er 3 eller flere niveau ned i mappe?? Hvis du ved hvad jeg mener?
05. november 2002 - 21:17
#3
jeg kan sq ikke helt få det til at virke som det skal... jeg kan godt nok så sammentalt bytes for det valgte dir, men ikke for subdirs function dir_size($dir) { $current_dir = $dir; $dir = opendir($dir); while($file = readdir($dir)) { if(is_file($file)) $current_dir_size += filesize($file); else { if($file != '..' && $file != '.') { $subdir = $current_dir.'/'.$file; echo $subdir.'<br>'; //$current_dir_size += dir_size($subdir); } } } closedir($dir); return $current_dir_size; }
05. november 2002 - 21:17
#4
det er derfor funktionen kalder sig selv, hvis den får fat i et bibliotek - på den måde får du fat i samtlige undermapper - det er det som forstås ved en rekursiv funktion!
06. november 2002 - 12:25
#5
Du har udkommenteret den linie som sørger for det rekursive - derfor får du kun størrelsen for det aktive niveau!
06. november 2002 - 12:55
#6
det ved jeg, men den virker ikke alligevel... kan du ikke lige hjælpe mig? jeg kan ikke hitte ud af det :(
06. november 2002 - 16:00
#7
Grunden til at den hopper i havet er at du overskriver inputargumentet ($dir) med et dirhandle i linien $dir = opendir($dir); - det er dumt! Tilpasset den pseudokode jeg skrev til dig ser det sådan ud: function dir_size($dir) { $current_dir_size = 0; $handle = opendir($dir); while(($file = readdir($handle)) !== false) { if(is_file($file)) { $current_dir_size += filesize($file); } elseif($file != '..' && $file != '.') { $current_dir_size += dir_size("$dir/$file"); } } closedir($handle); return $current_dir_size; } brug funktionen: echo dir_size('mappenavn');
08. november 2002 - 16:40
#8
Jeg kan sq stadig ikke få det til at virke... får følgende fejl: Warning: OpenDir: Invalid argument (errno 22) in S:\HTTP\_www\test.php on line 4 Warning: readdir(): supplied argument is not a valid Directory resource in S:\HTTP\_www\test.php on line 5 Her er min kode som jeg har pastet fra dig: function dir_size($dir) { $current_dir_size = 0; $handle = opendir($dir); while(($file = readdir($handle)) !== false) { if(is_file($file)) { $current_dir_size += filesize($file); } elseif($file != '..' && $file != '.') { $current_dir_size += dir_size("$dir/$file"); } } closedir($handle); return $current_dir_size; } echo dir_size('s:/dc');
08. november 2002 - 17:29
#9
så har du ikke fodret den med et gyldigt bibliotek...
08. november 2002 - 17:32
#11
prøv med følgende i stedet for $handle = open...; if(($handle = opendir($dir)) === false) die("Biblioteket kan ikke åbnes");
13. november 2002 - 00:29
#12
Mappen som jeg prøver at finde størrelsen på et lokalt... altså ikke på netværk eller tilsluttet netværksdrev... jeg kan bare ikke forstå hvorfor jeg ikke kan få det til at virke når du kan få det til at virke hos dig... du har måske testet det?? :)
13. november 2002 - 00:49
#13
jeg får forresten fejlen "Biblioteket kan ikke åbnes"
13. november 2002 - 00:52
#14
Jeg tester næsten aldrig noget af det jeg skriver på eksperten, men beklager at måtte meddele, at der faktisk var fejl i dette - det er jeg ked af! Rettet udgave: function dir_size($dir) { $current_dir_size = 0; if(($handle = opendir($dir)) === false) die("Biblioteket $dir kan ikke åbnes"); while(($file = readdir($handle)) !== false) { $curfile = $dir . '/' . $file; if(is_file($curfile)) { $current_dir_size += filesize($curfile); } elseif(is_dir($curfile) && $file != '..' && $file != '.') { $current_dir_size += dir_size($curfile); } } closedir($handle); return $current_dir_size; } echo dir_size('./images') . " bytes";
13. november 2002 - 01:05
#15
hehe... mange tark.. :)
13. november 2002 - 01:11
#16
you're welcome - havde faktisk ikke helt forstået hvordan is_file() og is_dir() fungerer - men nu har jeg lært noget nyt :-)
13. november 2002 - 01:29
#17
man lærer jo noget nyt hver eneste dag :) så blev du jo det klogere
Vi tilbyder markedets bedste kurser inden for webudvikling