Hej alla sköningar! Kan du inte försäkra dig om att bilderna har kända filnamn som t ex "1.jpg", "2.jpg" o s v? Då behöver du ju bara veta antalet filer i mappen som matchar "*.jpg" och sedan slumpa fram ett filnamn : Omständigt du gör det då... ;-) okej... ja din lösning är definitivt mycket bättre! Jag testade den och den fungerar bra. Den är kortare och jag slipper loopa igenom alla filerna! Så hur som helst var den till hjälp!Koden (FileSystemObject) går trögt på servern...
Jag har kodat en liten grej i ASP som slumpar fram en bild från en katalog. Då har jag använt mig av FileSystemObject för jag vill slumpa bilden från katalogen oberoende av hur många bilder den innehåller och oberoende av vad filnamnen är. Problemet är att det går onödigt långsamt för sidan att ladda. Nu undrar jag om det finns någon i den här härliga gemenskapen av professionella utvecklare som har en smartare lösning som inte är lika tungkörd för servern.
Här är koden:
-----------------------------------------------------------
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Dim objFolder
Set objFolder = objFSO.GetFolder("bilder/thumbnails")
Dim objFile
Dim x
Dim svin(200)
x = 0
For Each objFile in objFolder.Files
svin(x) = objFile.Name
x = x + 1
Next
Randomize
slump = Int(Rnd * x)
-----------------------------------------------------------
Sedan skriver jag ut den i html med <img src="bilder/thumbnails/<%=svin(slump)%>">
MVH
JohanSv: Koden (FileSystemObject) går trögt på servern...
<code>
filnamn=cstr(slump) & ".jpg"
</code>
Det finns verktyg som döper om filerna automatiskt (t ex JASC Painshop Pro) men även Windows har en inbyggd funktion för detta. Prova att markera flera filer i en mapp, tryck på F2 (eller högerklicka och välj Rename) och skriv in ett filnamn. Anger du "bild.jpg" så kommer filerna du markerat att döpas till :
bild.jpg
bild(1).jpg
bild(2).jpg
bild(3).jpg
... o s v
Då slipper du använda filesystemobjektet och du behöver inte lista alla filnamn.Sv: Koden (FileSystemObject) går trögt på servern...
OBS, det nedan har jag inte testat men det borde fungera. Som vanligt så är variabelnamn mm inte bokstavliga utan det nedan är mer för att visa hur man skulle kunna göra.
<code>
Function GetMyfunnyFile() as string
Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder, SubFolder As Scripting.Folder
Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder("bilder/thumbnails")
Randomize
dim slump as integer
slump = Int(Rnd * SourceFolder.Files.Count)
GetMyfunnyFile = SourceFolder.Files.Item(slump).Name
end function
</code>
oxå anropar du
<info>
<img src="bilder/thumbnails/<%=GetMyFunnyFile%>">
</info>
Att ersätta filnamen med andra namn är ju inte en bra lösning(framförallt inget en lat programerare skulle göra ;-) ) iom att det ställer till andra problem.
1. Hur gör du om du vill uppdatera bilderna med andra bilder, dvs ersätta bilden "myfunny.jpg" med "myunfunny.jpg"? Vilken av bilderna bild(1).jpg, bild(2).jpg osv är "myfunny.jpg"? Skall man då sitta och manuellt gå igenom dem och leta efter "myfunny.jpg"? Nä, jag är lat och vill inte göra sånt.
2. Lägga till nya bilder. Skall du lägga till nya bilder så måste de döpas om... Jobbigt och jag är lat, dvs mycket bättre om det bara är att kopiera över filerna och det fungerar.
Edit: provade att lista filerna i en katalog mha ett winform, >1600 filer gick toksnabbt att lista namnen på.Sv:Koden (FileSystemObject) går trögt på servern...
Men jag upplever fortfarande den där fördröjningen precis som innan. Kanske handlar det helt enkelt om att jag använder FileSystemObject och att det är det som tar lite tid - hur jag än kodar? För mig så tar det i alla fall lika lång tid att lista alla namnen i katalogen... Men det handlar kanske om 2 sekunder, fast det känns länge.
Då för det mig in på nästa fråga:
Kan man göra så att all design laddar innan ASP operationerna så att själva fördröjningen bara gäller bilden som ska slumpas och inte hela sidan? Jag har försökt att lägga html-koden före, men det hjälper inte. Det verkar som den läser all ASP först...
Tack för all hjälp!
MVH
Johan