Avatar billede mick Nybegynder
16. oktober 2002 - 14:33 Der er 10 kommentarer og
2 løsninger

Tjekke om fil eller mappe?

Findes der en funktion i perl som gør det muligt at tjekke om en givet path er til en fil eller en mappe?

Hvis jeg f.eks. kører linien : @liste = readdir (MAPPE); vil jeg i @liste få en masse navne på filer og mapper. Jeg ønsker så at tjekke om et givet navn er en fil eller en mappe.
Avatar billede kennie_nm Nybegynder
16. oktober 2002 - 14:37 #1
jeg er helt sikker på at File pakken har den ønskede funktionalitet
Avatar billede jespernaur Nybegynder
16. oktober 2002 - 16:55 #2
$navn = 'mappe_eller_filnavn';

if (-d $navn) {
  # mappe
}
else {
  #fil
}

Mvh
Jesper Naur
Avatar billede mick Nybegynder
16. oktober 2002 - 17:00 #3
jesper> Kan ikke hlet få dit eksempel til at virke. Scriptet genkender kun "mapperne" "." og "..", mens alle andre mapper bliver behandlet som filer.

Hvad betyder (-d $var)?
Avatar billede jespernaur Nybegynder
16. oktober 2002 - 17:07 #4
Operationen -d tester om et filnavn er en mappe (-d for directory), så det kan ikke gøres simplere, der er også en -f der tester om det er en fil. Jeg fatter nu ikke hvorfor dit ikke virker, kan du ikke vise din kode der løber igennem @liste?
Avatar billede mick Nybegynder
16. oktober 2002 - 17:10 #5
Her er koden jeg benytter:

opendir(MAPPE, "$dt");
@indhold = readdir (MAPPE);
foreach $linie (@indhold) {
    if (-d $linie) {
          print "Mappe: $linie\n";
    }
    else {
          print "Fil: $linie\n";
    }

}
closedir(MAPPE);
Avatar billede mick Nybegynder
16. oktober 2002 - 17:12 #6
Hvis jeg kører sciptet med"/" som "mappe", virker det fint.
Avatar billede jespernaur Nybegynder
16. oktober 2002 - 17:14 #7
Hvad har du så i $dt når det ikke virker?
Avatar billede mick Nybegynder
16. oktober 2002 - 17:15 #8
f.eks. /tmp/script/
Avatar billede jespernaur Nybegynder
16. oktober 2002 - 17:18 #9
Hvis du alligevel har mappenavnet i variablen $dt er det da unødvendigt med gåseøjne omkring, har du prøvet

opendir(MAPPE, $dt);

?
Avatar billede mick Nybegynder
16. oktober 2002 - 17:31 #10
opendir(MAPPE, $dt); gjorde dessværre ingen forskel.
Avatar billede jespernaur Nybegynder
16. oktober 2002 - 17:39 #11
Hvis du ikke 'står' i den mappe, du gennemløber, er du nødt til at foranstille hvert filnavn med mappenavnet, ellers kan den ikke finde filerne, altså omtrent:

opendir(MAPPE, "$dt");
@indhold = readdir (MAPPE);
foreach $linie (@indhold) {
    $fuldtnavn = $dt . $linie;
    if (-d $fuldtnavn) {
          print "Mappe: $linie\n";
    }
    else {
          print "Fil: $linie\n";
    }

}
Avatar billede mick Nybegynder
16. oktober 2002 - 17:43 #12
Nu virker det. Mange tak for hjælpen
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
Kategori
Kurser inden for grundlæggende programmering

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