Toon posts:

[ASP] Directory Listing van een bepaald type bestand

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het volgende script leest netjes mijn opgegeven folder uit. Ik wil echter alleen bestanden van het type .wmv en .mov uitlezen. Het zal de warmte zijn maar ik kan niet vinden hoe ik dit in het Scripting.FileSystemObject kan toevoegen? Op msdn kan ik het ook niet vinden, maar dit moet toch simpel zijn?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
sub ListFolderContents(path)

     dim fs, folder, file, item, url

     set fs = CreateObject("Scripting.FileSystemObject")
     set folder = fs.GetFolder(path)

    'Display the target folder and info.

     Response.Write("<li><b>" & folder.Name & "</b> - " _
       & folder.Files.Count & " files, ")
     if folder.SubFolders.Count > 0 then
       Response.Write(folder.SubFolders.Count & " directories, ")
     end if
     Response.Write(Round(folder.Size / 1024) & " KB total." _
       & vbCrLf)

     Response.Write("<ul>" & vbCrLf)

     'Display a list of sub folders.

     for each item in folder.SubFolders
       ListFolderContents(item.Path)
     next

     'Display a list of files.

     for each item in folder.Files
       url = MapURL(item.path)
       Response.Write("<li><a href=""" & url & """>" & item.Name & "</a> - " _
         & item.Size & " bytes, " _
         & "last modified on " & item.DateLastModified & "." _
         & "</li>" & vbCrLf)
     next

     Response.Write("</ul>" & vbCrLf)

     Response.Write("</li>" & vbCrLf)

   end sub

   function MapURL(path)

     dim rootPath, url

     'Convert a physical file path to a URL for hypertext links.

     rootPath = Server.MapPath("/")
     url = Right(path, Len(path) - Len(rootPath))
     MapURL = Replace(url, "\", "/")

   end function

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Handmatig doorlopen? Vergeet sowieso niet je objecten te destroyen

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op donderdag 27 juli 2006 @ 12:06:
Handmatig doorlopen? Vergeet sowieso niet je objecten te destroyen
Handmatig doorlopen? Nee juist niet, ik zou gewoon een globaal filter willen toepassen waardoor alleen bestanden van het type wmv en mov getoond worden?
Ik zou toch zoiets van if item.fyletype = .wmv OR itm.fyletype = wmv then....moeten kunnen toepassen?

Hoe destroy ik de objecten?

  • wboevink
  • Registratie: September 2004
  • Laatst online: 09-02 17:21
Uit het blote hoofd
Dim toevoegen, for loop aanpassen
Je zou verwachten dat er een mooiere methode is, maar helaas

Dim FileExtension

for each item in folder.Files
FileExtension = Right(item.name,4)
if FileExtension = ".wmv" or FileExtension = ".mov" then
url = MapURL(item.path)
Response.Write("<li><a href=""" & url & """>" & item.Name & "</a> - " _
& item.Size & " bytes, " _
& "last modified on " & item.DateLastModified & "." _
& "</li>" & vbCrLf)
end if
next

[ Voor 25% gewijzigd door wboevink op 27-07-2006 12:14 ]


  • wboevink
  • Registratie: September 2004
  • Laatst online: 09-02 17:21
Verwijderd schreef op donderdag 27 juli 2006 @ 12:08:
[...]
Hoe destroy ik de objecten?
set item = nothing
set file = nothing
set folder = nothing
set fs nothing

Verwijderd

Topicstarter
Tja, super simpel maar wel werkend!

Ik zat zelf te kijken naar de volgende aanpassing:

code:
1
2
3
4
5
6
7
8
9
10
11
    'Display a list of files.

     for each item in folder.Files
        if item.Type = ".wmv" then
            url = MapURL(item.path)
            Response.Write("<li><a href=""" & url & """>" & item.Name & "</a> - " _
            & item.Size & " bytes, " _
            & "laatst gewijzigd op: " & item.DateLastModified & "." _
            & "</li>" & vbCrLf)
        end if
     next

maar dan krijg ik geen bestand meer terug.. file.extention of file.type moet toch een standaard attribuut zijn? Maar goed, wboevink's oplossing werkt perfect! thanks!

Verwijderd

Topicstarter
Het weergeven gaat nu prima, alleen door het in een later stadium afvangen van type bestand worden er nu mappen weergegeven die eigenlijk leeg zijn . (ze zijn niet leeg, ze bevatten alleen geen .wmv en .mov.

Ik dacht de loop van subfolders uit te breiden met dezelfde check:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for each item in folder.SubFolders
        TellerFiles = 0
            for each item in folder.Files
            FileExtension = Right(item.name,4)
            FileHidden = Left(item.name,1)
            if FileExtension = ".wmv" AND FileHidden <> "." then
            TellerFiles = TellerFiles + 1
            end if      
     next

If TellerFiles > 0 then
ListFolderContents(item.Path)
end if 
     next


maar dan krijg ik de foutmelding:
Microsoft VBScript compilation error '800a0410'

Invalid 'for' loop control variable

for each item in folder.Files

mag er geen loop in deze loop?

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Jawel, maar je mag niet twee keer dezelfde variabele gebruiken.
code:
1
2
3
4
5
6
7
for each itemA in collectieA
  ...
  for each itemB in itemA.CollectieB
    ...
  next itemB
  ...
next itemA

Verwijderd

Topicstarter
mmm, daar moet ik even over nadenken,

is het aanspreken van file binnen de loop van item niet voldoende? (retorisch, nee want het werkt niet)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     'Display a list of sub folders.
Dim  TellerFiles,FileExtension1,FileHidden1
     for each item in folder.SubFolders
        TellerFiles = 0
            for each file in folder.Files
            FileExtension1 = Right(file.name,4)
            FileHidden1 = Left(file.name,1)
            if FileExtension1 = ".wmv" AND FileHidden1 <> "." then
            TellerFiles = TellerFiles + 1
            end if      
      next
response.Write(TellerFiles)
If TellerFiles > 0 then
ListFolderContents(item.Path)
end if 
     next

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Om eerlijk te zijn zie ik ook het nut er niet van in om in een loop de subfolders te doorlopen en in deze loop de bestanden in folder te tellen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
_js_ schreef op vrijdag 28 juli 2006 @ 11:07:
Jawel, maar je mag niet twee keer dezelfde variabele gebruiken.
code:
1
2
3
4
5
6
7
for each itemA in collectieA
  ...
  for each itemB in itemA.CollectieB
    ...
  next itemB
  ...
next itemA
dit werkt niet omdat item geen variabele is

Verwijderd

Topicstarter
gorgi_19 schreef op vrijdag 28 juli 2006 @ 11:16:
Om eerlijk te zijn zie ik ook het nut er niet van in om in een loop de subfolders te doorlopen en in deze loop de bestanden in folder te tellen.
Wat ik wil bereiken is dat er alleen folders worden weergegeven waar bestanden van het type .wmv en .mov in zitten. De opzet nu is dat er eerst een folderstrucuur wordt aangemaakt en weergegeven om vervolgens alle bstanden te tonen die er inzitten. Tijdens de loop van alle gevonden items maak ik de selectie van het type .wmv en .mov. Hierdoor onstaan er "achteraf" mappen die leeg zijn omdat ze geen bestanden van het type wmv en mov bevatten.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14-02 12:34

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op vrijdag 28 juli 2006 @ 11:19:
[...]


Wat ik wil bereiken is dat er alleen folders worden weergegeven waar bestanden van het type .wmv en .mov in zitten. De opzet nu is dat er eerst een folderstrucuur wordt aangemaakt en weergegeven om vervolgens alle bstanden te tonen die er inzitten. Tijdens de loop van alle gevonden items maak ik de selectie van het type .wmv en .mov. Hierdoor onstaan er "achteraf" mappen die leeg zijn omdat ze geen bestanden van het type wmv en mov bevatten.
Dan moet je nog steeds gaan kijken IN de subfolder en niet in de hoofdfolder

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op vrijdag 28 juli 2006 @ 11:25:
[...]

Dan moet je nog steeds gaan kijken IN de subfolder en niet in de hoofdfolder
klopt, vandaar de telling van file voor elke gevonden subfolder.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     'Display a list of sub folders.
Dim  TellerFiles,FileExtension1,FileHidden1
     for each item in folder.SubFolders
        TellerFiles = 0
            for each file in folder.Files
            FileExtension1 = Right(file.name,4)
            FileHidden1 = Left(file.name,1)
            if FileExtension1 = ".wmv" AND FileHidden1 <> "." then
            TellerFiles = TellerFiles + 1
            end if      
      next
response.Write(TellerFiles)
'If TellerFiles > 0 then
ListFolderContents(item.Path)
'end if 
     next
Pagina: 1