/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hvordan kan jeg lave følgende...
Fra : Magnus


Dato : 26-03-08 18:22

Har brug for en funkton som gennemløber og lister alle filnavne som ligger
på serveren. Jeg kan godt lave en funktion som lister filerne i en mappe men
jeg vil også have vist alle dem der ligger i mapper og undermapper.

Hvordan kan jeg lave sådan en funktion?

Det skal bruges til at se hvornår diverse filer er rettet.


/Magnus



 
 
Jørn Andersen (26-03-2008)
Kommentar
Fra : Jørn Andersen


Dato : 26-03-08 23:56

On Wed, 26 Mar 2008 18:21:40 +0100, "Magnus" <magnusFJERN@arnason.dk>
wrote:

>Har brug for en funkton som gennemløber og lister alle filnavne som ligger
>på serveren. Jeg kan godt lave en funktion som lister filerne i en mappe men
>jeg vil også have vist alle dem der ligger i mapper og undermapper.
>
>Hvordan kan jeg lave sådan en funktion?

Du skal bruge det der hedder en rekursiv funtkion, dvs. en funktion som
kalder sig selv.

Se fx:
<url: http://www.15seconds.com/Issue/000803.htm>
<url: http://www.4guysfromrolla.com/webtech/060299-2.shtml>
<url:
http://www.wwwcoder.com/main/parentid/154/site/899/68/default.aspx>
<url: http://www.html.dk/scripts/asp/00015/>

Den første link er ret tæt på det, du skal bruge - den lister bare kun
mapper og ikke filer. Men når du har forstået princippet i rekursive
funktioner, så finder du nok selv ud af det

Bemærk advarslen: Du risikerer at få en uendelig loop, hvis ikke du
sikrer dig, at der sættes de rigtige betingelser for at komme ud af
loopen igen!


Good luck!

--
Jørn Andersen,
Brønshøj

Stig Johansen (27-03-2008)
Kommentar
Fra : Stig Johansen


Dato : 27-03-08 01:18

Jørn Andersen wrote:

> On Wed, 26 Mar 2008 18:21:40 +0100, "Magnus" <magnusFJERN@arnason.dk>
> wrote:
>
>>Har brug for en funkton som gennemløber og lister alle filnavne som ligger

[snip url'er]
Her er en til - til samlingen:
http://www.brainjar.com/asp/dirlist/
Den laver det hele, inklusive klikbare links.

--
Med venlig hilsen
Stig Johansen

Jørn Andersen (27-03-2008)
Kommentar
Fra : Jørn Andersen


Dato : 27-03-08 00:25

On Wed, 26 Mar 2008 18:21:40 +0100, "Magnus" <magnusFJERN@arnason.dk>
wrote:

>Har brug for en funkton som gennemløber og lister alle filnavne som ligger
>på serveren. Jeg kan godt lave en funktion som lister filerne i en mappe men
>jeg vil også have vist alle dem der ligger i mapper og undermapper.
>
>Hvordan kan jeg lave sådan en funktion?
>
>Det skal bruges til at se hvornår diverse filer er rettet.

En måde at lave det på kunne være:
<%
Function GetSubFolderFile(sti)
Dim strNySti, fs, f, files, fc, f1, f2
Response.Write sti & "<br>" & vbcrlf
If Right(sti,1) <> "/" Then
sti = sti + "/"
End if

Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(Server.MapPath(sti))
Set files = f.Files
For Each f2 in files
Response.Write "- " & f2.name & _
" Modif: " & f2.DateLastModified & "<br>" & vbcrlf
Next

Set fc = f.SubFolders
For Each f1 in fc
strNySti = sti & f1.name
GetSubFolderFile(strNySti)
Next
Response.Write "<br>" & vbcrlf
Set fs = Nothing
Set f = Nothing
Set files = Nothing
Set fc = Nothing
End Function

' Kald funktionen sådan, hvis du vil køre den fra den aktuelle mappe:
GetSubFolderFile(".")
%>

Tilret selv efter behov.

Good luck!

--
Jørn Andersen,
Brønshøj

Erik Ginnerskov (27-03-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 27-03-08 01:57

Jørn Andersen wrote:

> <%
> [klip kode]
> Response.Write "- " & f2.name & _
> " Modif: " & f2.DateLastModified & "<br>" & vbcrlf
[klip kode]
> %>

Den kodelinje prøvede jeg at modificere:

Response.Write "- <a href='" & f2.name & "'>" & f2.name & "</a>" &_
" Modif: " & f2.DateLastModified & "<br>" & vbcrlf

.... for samtidig at lave link til de oplistede filer. Det fungerer faktisk.

Men jeg kan ikke gennemskue hvordan jeg kan selektere enkelte filtyper som
f.eks. .asp, .php og .html.

Jeg prøvede at indsætte denne kodelinje (hentet fra et andet script, der
lister .asp og .php i samme mappe):

If ( lcase(FSO.GetExtensionName(fil)) = "asp") OR (
lcase(FSO.GetExtensionName(fil)) = "php") Then

.... efter denne linje:

For Each f2 in files

.... men så brokker den sig over det først følgende Next

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://vestfynswebdesign - http://html-faq.dk



Jørn Andersen (27-03-2008)
Kommentar
Fra : Jørn Andersen


Dato : 27-03-08 03:40

On Thu, 27 Mar 2008 01:57:10 +0100, "Erik Ginnerskov"
<erik.ginnerskov@live.dk> wrote:

>Men jeg kan ikke gennemskue hvordan jeg kan selektere enkelte filtyper som
>f.eks. .asp, .php og .html.
>
>Jeg prøvede at indsætte denne kodelinje (hentet fra et andet script, der
>lister .asp og .php i samme mappe):
>
>If ( lcase(FSO.GetExtensionName(fil)) = "asp") OR (
>lcase(FSO.GetExtensionName(fil)) = "php") Then
>
>... efter denne linje:
>
> For Each f2 in files
>
>... men så brokker den sig over det først følgende Next

Har du nestet forkert?

Ellers prøv med noget lig:
   For Each f2 in files
      If LCase(Right(f2.name, 3)) = "asp" Then
         Response.Write f2.name & "<br>" & vbcrlf
      End If
   Next


Good luck!

--
Jørn Andersen,
Brønshøj

Erik Ginnerskov (27-03-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 27-03-08 13:22

Jørn Andersen wrote:

> Har du nestet forkert?

Det skulle da ikke undre mig, men jeg kan ikke gennemskue hvor.

> Ellers prøv med noget lig:
> For Each f2 in files
> If LCase(Right(f2.name, 3)) = "asp" Then
> Response.Write f2.name & "<br>" & vbcrlf
> End If
> Next

Det fungerer fint. Alle aspfiler bliver oplistet. Jeg prøvede at udbygge det
lidt for at få html-filer med:

If LCase(Right(f2.name, 3)) = "asp" & _
OR LCase(Right(f2.name, 3)) = "html" Then
'her sat på to linjer for at undgå uhensigtsmæssigt
'placeret linjeskift. I mit script kun i en linje
'udem "& _" sidst i første del.

Men html-filerne kommer ikke med på listen.

Til gengæld gik det (relativt) fint med en modifikation, der sætter filnavne
med links og Modified op i en fin tabel. Men der går lidt ged i det når det
kommer til mapper.

Scriptet:

<%
Function GetSubFolderFile(sti)
Response.write "<table summary=''>"
Dim strNySti, fs, f, files, fc, f1, f2
Response.Write sti & "<br />" & vbcrlf
If Right(sti,1) <> "/" Then
sti = sti + "/"
End if

Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(Server.MapPath(sti))
Set files = f.Files
For Each f2 in files
If LCase(Right(f2.name, 3)) = "asp" OR LCase(Right(f2.name, 3)) = "html"
Then
Response.Write "<tr><td><a class='tlink' href='" & f2.name & "'>" &
f2.name & "</a></td>" & _
"<td>Modif: " & f2.DateLastModified & "</td></tr>" & vbcrlf
End If
Next

Set fc = f.SubFolders
For Each f1 in fc
strNySti = sti & f1.name
GetSubFolderFile(strNySti)
Next
Response.Write "<br />" & vbcrlf
Set fs = Nothing
Set f = Nothing
Set files = Nothing
Set fc = Nothing
Response.write "</table>"
End Function
' Kald funktionen sådan, hvis du vil køre den fra den aktuelle mappe:
GetSubFolderFile(".")
%>

Aktuelle mappe indsættes i tabellen efter tabellens starttag og uden hverken
<tr></tr> eller <td></td> og undermapper sættes ind efter sidste </tr>:

<table>.<br />
<tr><td><a href="foo.asp">foo.asp</a></td><td>Modif: 27-03-2008
13:11:46</td></tr><table summary=''>./images<br />
<br />
</table><table summary=''>./udenframes<br />
<br />
</table><br />
</table>

Bortset fra anden linje html-kode ser det lidt underligt ud.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://vestfynswebdesign - http://html-faq.dk



Jørn Andersen (27-03-2008)
Kommentar
Fra : Jørn Andersen


Dato : 27-03-08 23:37

On Thu, 27 Mar 2008 13:21:33 +0100, "Erik Ginnerskov"
<erik.ginnerskov@live.dk> wrote:

>Det fungerer fint. Alle aspfiler bliver oplistet. Jeg prøvede at udbygge det
>lidt for at få html-filer med:
>
> If LCase(Right(f2.name, 3)) = "asp" & _
> OR LCase(Right(f2.name, 3)) = "html" Then
> 'her sat på to linjer for at undgå uhensigtsmæssigt
> 'placeret linjeskift. I mit script kun i en linje
> 'udem "& _" sidst i første del.
>
>Men html-filerne kommer ikke med på listen.

Prøv at rette 3-tallet til et 4-tal (der er 4 tegn i "html").



Mvh. Jørn

--
Jørn Andersen,
Brønshøj

Erik Ginnerskov (28-03-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 28-03-08 01:14

Jørn Andersen wrote:

> Prøv at rette 3-tallet til et 4-tal (der er 4 tegn i "html").

Minsandten ja. Og sjovt nok kommer et par shtml-filer nu også med.

I mellemtiden har jeg møbleret lidt om på scriptet, så den resulterende
sider validerer:

<%
Function GetSubFolderFile(sti)
Response.write "<table summary=''>"
Dim strNySti, fs, f, files, fc, f1, f2
Response.Write "<tr><td>" & sti & "</td><td></td></tr>" & vbcrlf
If Right(sti,1) <> "/" Then
sti = sti + "/"
End if

Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(Server.MapPath(sti))
Set files = f.Files
For Each f2 in files
'den næste linje kunne jeg ikke dele og få det til at virke
If LCase(Right(f2.name, 3)) = "asp" OR LCase(Right(f2.name, 3)) = "php" OR
LCase(Right(f2.name, 3)) = "htm" OR LCase(Right(f2.name, 4)) = "html" Then
Response.Write "<tr><td><a class='tlink' href='" & f2.name & "'>" &
f2.name & "</a></td>" & _
"<td>Modif: " & f2.DateLastModified & "</td></tr>" & vbcrlf
End If
Next
Response.write "</table>" & vbCrLf

Set fc = f.SubFolders
For Each f1 in fc
strNySti = sti & f1.name
GetSubFolderFile(strNySti)
Next
'Response.Write "<br />" & vbcrlf
Set fs = Nothing
Set f = Nothing
Set files = Nothing
Set fc = Nothing
'Response.write "</table>" & vbCrLf
End Function
' Kald funktionen sådan, hvis du vil køre den fra den aktuelle mappe:
GetSubFolderFile(".")
%>

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://vestfynswebdesign - http://html-faq.dk



Jørn Andersen (28-03-2008)
Kommentar
Fra : Jørn Andersen


Dato : 28-03-08 03:06

On Fri, 28 Mar 2008 01:13:40 +0100, "Erik Ginnerskov"
<erik.ginnerskov@live.dk> wrote:

>Jørn Andersen wrote:
>
>> Prøv at rette 3-tallet til et 4-tal (der er 4 tegn i "html").
>
>Minsandten ja. Og sjovt nok kommer et par shtml-filer nu også med.
>
>I mellemtiden har jeg møbleret lidt om på scriptet, så den resulterende
>sider validerer:

Men de bliver så ikke rykket ind i f.t. niveau af undermapper. Jeg ved
ikke lige, om der er nogle HTML-tags, der er gode til den slags, men en
definitionsliste er det bedste forslag, jeg kan komme på.

<%
Function GetSubFolderFile(sti)
   Dim strNySti, fs, f, files, fc, f1, f2, strFiles
   strFiles = ""
   Response.Write "<dl>" & vbcrlf & "<dt>" & sti & "</dt>" & vbcrlf
   If Right(sti,1) <> "/" Then
      sti = sti + "/"
   End if

   Set fs = Server.CreateObject("Scripting.FileSystemObject")
   Set f = fs.GetFolder(Server.MapPath(sti))
   Set files = f.Files

   Response.Write "<dd>" & vbcrlf

   For Each f2 in files
      strFiles = strFiles & "<tr><td>" & f2.name & "</td><td>" & _
      f2.DateLastModified & "</td></tr>" & vbcrlf
   Next
   If strFiles <> "" Then
      Response.Write "<table>" & vbcrlf & strFiles & "</table>" & vbcrlf
   End If

   Set fc = f.SubFolders
   For Each f1 in fc
      strNySti = sti & f1.name
      GetSubFolderFile(strNySti)
   Next
   Response.Write "<dd>" & vbcrlf & "</dl>" & vbcrlf
   Set fs = Nothing
   Set f = Nothing
   Set files = Nothing
   Set fc = Nothing
End function

' Kald funktionen sådan, hvis du vil køre den fra den aktuelle mappe:
GetSubFolderFile(".")

%>

--
Jørn Andersen,
Copenhagen, Denmark

Jørn Andersen (28-03-2008)
Kommentar
Fra : Jørn Andersen


Dato : 28-03-08 03:25

On Fri, 28 Mar 2008 03:06:05 +0100, Jørn Andersen <jorn@jorna.dk> wrote:

>>Jørn Andersen wrote:
>Men de bliver så ikke rykket ind i f.t. niveau af undermapper. Jeg ved
>ikke lige, om der er nogle HTML-tags, der er gode til den slags, men en
>definitionsliste er det bedste forslag, jeg kan komme på.

Og nu da der er ved at gå sport i den, så kan man også få
HTML-kildekoden til at se pæn ud med indryk:

<%
Dim intLevel
intLevel = -2

Function fktPreString(indryk)
   fktPreString = String(intLevel + indryk, " ")
End Function

Function GetSubFolderFile(sti)
   Dim strNySti, fs, f, files, fc, f1, f2, strFiles
   strFiles = ""
   intLevel = intLevel + 2

   Response.Write fktPreString(0) & "<dl>" & vbcrlf & _
   fktPreString(1) & "<dt>" & sti & "</dt>" & vbcrlf

   If Right(sti,1) <> "/" Then
      sti = sti + "/"
   End if

   Set fs = Server.CreateObject("Scripting.FileSystemObject")
   Set f = fs.GetFolder(Server.MapPath(sti))
   Set files = f.Files

   Response.Write fktPreString(1) & "<dd>" & vbcrlf

   For Each f2 in files
      strFiles = strFiles & fktPreString(3) & "<tr>" & vbcrlf & _
      fktPreString(4) & "<td>" & f2.name & "</td>" & vbcrlf & _
      fktPreString(4) & "<td>" & _
      f2.DateLastModified & "</td>" & vbcrlf & _
      fktPreString(3) & "</tr>" & vbcrlf
   Next
   If strFiles <> "" Then
      Response.Write fktPreString(2) & "<table>" & vbcrlf & _
      strFiles & fktPreString(2) & "</table>" & vbcrlf
   End If

   Set fc = f.SubFolders
   For Each f1 in fc
      strNySti = sti & f1.name
      GetSubFolderFile(strNySti)
   Next
   Response.Write fktPreString(1) & "</dd>" & vbcrlf & _
   fktPreString(0) & "</dl>" & vbcrlf

   intLevel = intLevel - 2
   Set fs = Nothing
   Set f = Nothing
   Set files = Nothing
   Set fc = Nothing
End function

GetSubFolderFile(".")
%>



Mvh. Jørn

--
Jørn Andersen,
Brønshøj

Erik Ginnerskov (01-04-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 01-04-08 00:57

Jørn Andersen wrote:

> Og nu da der er ved at gå sport i den, så kan man også få
> HTML-kildekoden til at se pæn ud med indryk:

Det synes jeg til gengæld er inderlig overflødig i denne sammenhæng.

Indryk i html-kildekode er godt hvor kildekoden skal kunne redigeres 'as
is'. Men sådan er det jo ikke her. Der bliver jo ikke tale om at kildekoden
skal redigeres, den er udskrevet af et asp-script ud fra en funktion, der
læser mappernes indhold.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://vestfynswebdesign.dk - http://html-faq.dk



Erik Ginnerskov (01-04-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 01-04-08 00:53

Jørn Andersen wrote:

> Men de bliver så ikke rykket ind i f.t. niveau af undermapper. Jeg ved
> ikke lige, om der er nogle HTML-tags, der er gode til den slags, men
> en definitionsliste er det bedste forslag, jeg kan komme på.

Nu havde jeg ellers lige ved endnu en ommøblering fået den til kun at lave
en enkelt tabel:

<%
Response.write "<table summary=''>"
Function GetSubFolderFile(sti)
Dim strNySti, fs, f, files, fc, f1, f2
Response.Write "<tr><td>" & sti & "</td><td></td></tr>" & vbcrlf
If Right(sti,1) <> "/" Then
sti = sti + "/"
End if

Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(Server.MapPath(sti))
Set files = f.Files
For Each f2 in files
If LCase(Right(f2.name, 3)) = "asp" OR LCase(Right(f2.name, 3)) = "php" OR
LCase(Right(f2.name, 3)) = "htm" OR LCase(Right(f2.name, 4)) = "html" Then
Response.Write "<tr><td><a class='tlink' href='" & f2.name & "'>" &
f2.name & "</a></td>" & _
"<td>Modif: " & f2.DateLastModified & "</td></tr>" & vbcrlf
End If
Next

Set fc = f.SubFolders
For Each f1 in fc
strNySti = sti & f1.name
GetSubFolderFile(strNySti)
Next
'Response.Write "<br />" & vbcrlf
Set fs = Nothing
Set f = Nothing
Set files = Nothing
Set fc = Nothing
End Function
' Kald funktionen sådan, hvis du vil køre den fra den aktuelle mappe:
GetSubFolderFile(".")
Response.write "</table>"
%>

Hermed er jeg tilfreds med udseende på output, så det holder jeg mig til.
Men selvfølgelig, hvis man ikke har sat border på tabelcellerne kan din
model med definitionslisten omkring mapperne være et godt alternativ.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://vestfynswebdesign.dk - http://html-faq.dk



Kurt G (29-03-2008)
Kommentar
Fra : Kurt G


Dato : 29-03-08 17:13

"Jørn Andersen"
KLIP
>> If LCase(Right(f2.name, 3)) = "asp" & _
>> OR LCase(Right(f2.name, 3)) = "html" Then
KLIP

Det er jo ikke lige i tråden, men hvor finder jeg en list med den slags
funktioner: "LCase(..) " samt alle de beslægtede?

Mvh Kurt



Kurt G (29-03-2008)
Kommentar
Fra : Kurt G


Dato : 29-03-08 17:16

Undskyld, jeg var for hurtig, men har fundet det!
Kurt
"Kurt G" <kurt_g@guldbaek.net> skrev i en meddelelse
news:47ee6a81$0$90273$14726298@news.sunsite.dk...
> "Jørn Andersen"
> KLIP
>>> If LCase(Right(f2.name, 3)) = "asp" & _
>>> OR LCase(Right(f2.name, 3)) = "html" Then
> KLIP
>
> Det er jo ikke lige i tråden, men hvor finder jeg en list med den slags
> funktioner: "LCase(..) " samt alle de beslægtede?
>
> Mvh Kurt
>



Stig Johansen (28-03-2008)
Kommentar
Fra : Stig Johansen


Dato : 28-03-08 00:50

Erik Ginnerskov wrote:

> Det fungerer fint. Alle aspfiler bliver oplistet. Jeg prøvede at udbygge
> det lidt for at få html-filer med:
>
> If LCase(Right(f2.name, 3)) = "asp" & _
> OR LCase(Right(f2.name, 3)) = "html" Then
>
> Men html-filerne kommer ikke med på listen.

Nogle gange kan det betale sig at vende bøtten.
Du kan f.eks bruge
if instr(lCase(f2.name),".asp") > 0 or instr(lCase(f2.name),".htm") > 0
then
....
osv
Så får du .asp,.htm,.html og .aspx filer med.

--
Med venlig hilsen
Stig Johansen

Erik Ginnerskov (28-03-2008)
Kommentar
Fra : Erik Ginnerskov


Dato : 28-03-08 01:23

Stig Johansen wrote:

> Nogle gange kan det betale sig at vende bøtten.
> Du kan f.eks bruge
> if instr(lCase(f2.name),".asp") > 0 or instr(lCase(f2.name),".htm") >
> 0 then

Den virker også. Men skal jeg have shtml-filer med, bliver den resulterende
kodelinje længere end Jørns model

> Så får du .asp,.htm,.html og .aspx filer med.

Jeg har ikke nogen aspx-filer at holde øje med, så Det bliver Jørns model.
Ellers tak til begge kombatanter.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://vestfynswebdesign - http://html-faq.dk



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste