Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 13:30 Der er 17 kommentarer og
1 løsning

Se indholdet af en mappe, lokalt.

Er det muligt med JavaScript, at se indholdet af en mappe lokalt, samt dets undermapper og deres indhold?

Det jeg søger er altså, at få vist en given mappe og alt dets indhold i en slags træ-struktur (ligesom stifinder).
Avatar billede roenving Novice
20. februar 2005 - 13:39 #1
I Jscript (M$-varianten af ECMA-/javascript !-) har du adgang til en masse ActiveX-ting og lignende ...

Bl.a. har du adgang til filesystemobjektet, og kan derfra opbygge sådant et træ, men gør stifinder det ikke ret godt i forvejen ?-)

F.eks.

var FSO = new ActiveXObject("Scripting.FileSystemObject");

-- og i min reference fandt jeg dette link (som dog er ca. 4 år gammelt, så det kan godt være et blindspor: http://msdn.microsoft.com/scripting/jscript/doc/jsobjfilesystem.html !-)
Avatar billede roenving Novice
20. februar 2005 - 13:41 #2
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 13:47 #3
Hmm. Må indrømme jeg er lidt tabt.
Har du ikke et link til noget sourcecode eller en tutorial, som viser hvorledes man viser indholdet af en mappe med JavaScript?
Avatar billede roenving Novice
20. februar 2005 - 13:52 #4
De første par links giver faktisk en meget god mulighed for at kigge på det, klik f.eks. Folders Collection: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/jscolfolders.asp og Files Collection: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/jscolfiles.asp !-)
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 14:02 #5
Nu har jeg smækket dette sammen:

<html>

<head>
<title>Show Folder Content</title>
</head>

<body>

<script>
function ShowFolderList(folderspec) {
  var fso, f, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.SubFolders);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
  }
  return(s);
}

function ShowFolderFileList(folderspec) {
  var fso, f, f1, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.files);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
  }
  return(s);
}
</script>

</body>

</html>

Men så er jeg gået i stå igen. Jeg har lidt problemer med, at kalde de forskellige funktioner, samt få sat det ordentligt sammen, så jeg har alt indhold (inkl. undermapper og deres indhold) af en given mappe.
Men lige meget hvad jeg prøver, så får jeg fejlen:

Linje: 11
Fejl: Automation-serveren kan ikke oprette objecktet
Avatar billede roenving Novice
20. februar 2005 - 14:10 #6
Sæt din browser til at køre active scripting lokalt:

'Tillad aktivt indhold at køre i filer på Denne Computer' under Avanceret-fanen i Internetindstillinger ...
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 14:12 #7
Hvor under avancerede indstillinger? Kan ikke finde det.
Avatar billede roenving Novice
20. februar 2005 - 14:12 #8
Næsten nederst ...
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 14:15 #9
Ser ikke ud til, at jeg har den indstilling.
Jeg kører Windows XP Pro med Service Pack 1 (ikke 2).
Avatar billede roenving Novice
20. februar 2005 - 14:17 #10
Så skal du måske kigge under sikkerhed --> brugerdefineret niveau !-)
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 14:19 #11
Er det så den som hedder "Hent ActiveX-objekter uden signatur"?
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 14:26 #12
Nu melder den da ikke fejl.
Men når jeg prøver, at kalde:

ShowFolderList("./");

så sker der ingenting?
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 16:39 #13
Hvis jeg således:

<script>
function ShowFolderList(folderspec) {
  var fso, f, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.SubFolders);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
  }
  return(s);
}

function ShowFolderFileList(folderspec) {
  var fso, f, f1, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.files);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
  }
  return(s);
}

document.write(ShowFolderList('D:/Websider'));
</script>

Så kan jeg nu få vist hhv. mine mapper eller mine filer, afhængig af hvilken funktion jeg bruger.
Nogen der kan smække dem sammen, så jeg får vist begge dele inkl. undermapper osv.? De skal vel køre rekursivt på hinanden.
Avatar billede roenving Novice
20. februar 2005 - 16:48 #14
Måske sådan:

function ShowFolderList(folderspec) {
  var fso, f, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.SubFolders);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
    s += ShowFolderList(fc.item());
    s += ShowFolderFileList(fc.item());
  }
  return(s);
}
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 16:59 #15
Hmm, viser ikke rigtig det jeg ønsker. Har prøvet noget ala:

<script>
function ShowFolderFileList(folderspec) {
  var fso, f, f1, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
 
  folders = new Enumerator(f.SubFolders);
  files = new Enumerator(f.files);

  s = "";
  for (; !folders.atEnd(); folders.moveNext()) {
    s += folders.item();
    s += "<br />";
    s += ShowFolderFileList(folders.item());
    s += "<br />";
  }

  for (; !files.atEnd(); files.moveNext()) {
    s += files.item();
    s += "<br />";
  }
  return(s);
}

document.write(ShowFolderFileList('D:/Websider'));
</script>

Men den kører ikke rekursivt, den hopper kun ind i den første mappe og dets første undermapper osv. Og så stopper den?
Avatar billede eikhorsholm Nybegynder
20. februar 2005 - 17:22 #16
Det virkede vist igen, dit forslag. Bare mig, igen, som ikke ved hvad jeg lavede :-)
Dette virker:

<html>

<head>
<title>.per</title>
</head>

<body>

<script>
function ShowFolderList(folderspec) {
  var fso, f, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.SubFolders);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
    s += ShowFolderList(fc.item());
    s += ShowFolderFileList(fc.item());
  }
  return(s);
}

function ShowFolderFileList(folderspec) {
  var fso, f, f1, fc, s;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
  fc = new Enumerator(f.files);
  s = "";
  for (; !fc.atEnd(); fc.moveNext()) {
    s += fc.item();
    s += "<br />";
  }
  return(s);
}

document.write(ShowFolderList('D:/Websider'));
</script>

</body>

</html>

Laver du ikke et svar?
Avatar billede roenving Novice
20. februar 2005 - 17:24 #17
Velbekomme '-)
Avatar billede roenving Novice
20. februar 2005 - 17:26 #18
-- og tak for point ;~}
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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