webForumDet fria alternativet

Vad är rätt i detta fall? (CreateFolder)

ASP

7 svar · 574 visningar · startad av per-v

Medlem sedan maj 200161 inlägg
Frågan#1

Hej!

En snabb fråga angående CreateFolder, vilken av nedanstående medtoder är "rätt"?

På den här sidan så har dom gjort följande:

<%
dim fs,f
set fs=Server.CreateObject("Scripting.FileSystemObject")
	set f=fs.CreateFolder("c:\asp")
	set f=nothing
set fs=nothing
%>

Provade att strunta i "set f=" och det fungerar ju lika bra...

<%
dim fs

set fs=Server.CreateObject("Scripting.FileSystemObject")
	fs.CreateFolder("c:\asp")
set fs=nothing
%>

Så vilket är det korrekta sättet, och vilket är det bästa sättet?

Kanske en dum fråga, men men...

Medlem sedan juni 20034 013 inlägg
#2

Inget av dem är korrekt. Nu kan jag visserligen inte asp/vb, men det som saknas är kontrollen av att katalogen verkligen skapades. Det normala är att en funktion returnerar false om den inte lyckades och true om allt gick bra.

Så, innan du gör set f = nothing måste du kolla om f är true eller false.

Medlem sedan juni 20022 599 inlägg
#3

Båda är "rätt". Däremot är det första "bättre" (i det här fallet) av två anledningar.

1. Det är fånigt att fånga ett returvärde man inte tänker använda.
2. Du tjänar (temporärt) 16 bytes på att inte allokera "f".

Medlem sedan maj 200010 687 inlägg
#4

niko, du menade det andra väl?

tydal, nej du kan inte det så då bör du heller inte uttala dig.
f kan aldrig vara True eller False eftersom att det är ett objekt. CreateFolder returnerar inte True/False, den returnerar ett objekt för mappen. Och har man kommit så långt så har mappen skapats. Skulle något bli fel på vägen så skulle den istället kört en error.raise och koden hade avbrutits.

Så här tycker jag man ska skriva:

<%
Dim fso

Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.CreateFolder "c:\asp"
Set fso = Nothing
%>

Alltså inga paranteser när man anropar en funktion utan att ta emot några returnerade värden. Skulle du t.ex. inte ta emot objektet Server.CreateObject returnerar så ska man skriva Server.CreateObject "Scripting.FileSystemObject". Inte för att man skulle vilja det, men ett exempel... :)

Medlem sedan juni 20034 013 inlägg
#5

Erik Juhlin skrev:

tydal, nej du kan inte det så då bör du heller inte uttala dig.

Jag kan programmering och vet hur viktigt det är med felhantering, så jag tyckte det var värt att säga till när det inte var med någon felkontroll i något av exemplen eftersom det är vanligt att folk missar det (koden funkar ju ändå).

Erik Juhlin skrev:

Skulle något bli fel på vägen så skulle den istället kört en error.raise och koden hade avbrutits.

Hur är det då meningen man ska göra för att själv få hantera felen? Att slänga ett runtime error i ansiktet på besökaren är ju väldigt oprofessionellt.

Medlem sedan juni 200032 967 inlägg
#6

tydal skrev:

Hur är det då meningen man ska göra för att själv få hantera felen?

On error resume next
 ' kod som kan producera fel
If err.number <> 0 then
     Response.write "Fanken, också! Någe e pajko!"
     Err.Clear
End if

On Error goto 0

Exempelvis. VBScript är inte speciellt kul att jobba med när det gäller felhantering.

Medlem sedan maj 200161 inlägg
#7

Tack för infon allihopa!

Jag kör på Eriks svar eftersom det var så jag gjort...

Medlem sedan juni 20022 599 inlägg
#8

Erik Juhlin skrev:

niko, du menade det andra väl?

Jo, jag har en känsla av det. För övrigt kan man ju (i det här fallet) lika gärna skriva:

Server.CreateObject("Scripting.FileSystemObject").CreateFolder "c:\asp"

Ännu färre tecken för tolken att parsa.

271 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)