webForumDet fria alternativet

Skapa folder med FSO

ASP

8 svar · 367 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Vad gör jag för fel?

Sub Makefolder(foldername)
	set fso = server.createobject("scripting.filesystemobject")
		foldername = server.mappath("upload") & "/" & foldername & "/"  
			IF Not fso.FolderExists(foldername) then
				fso.CreateFolder foldername
			End If
	set fso = nothing
End Sub

Kallar på den med

	Call Makefolder(username) 'Fungerar

	Call Makefolder(username & "/" & section) 'Fungerar inte!

Hur attans skriver jag subben / kallar på den för att skapa en mapp i en mapp?

username samt section kommer från ett formulär men har även testat att hårdkoda, fungerar ej.

Felet jag får är:

Error Type:
Microsoft VBScript runtime (0x800A0034)
Bad file name or number

Medlem sedan feb. 200112 078 inlägg
#2

Hej solis! ;)

Jag gissar innan jag testar din kod; skall inte fysiska sökvägar vara med \ och inte / ?

Medlem sedan feb. 200112 078 inlägg
#3

Aha! :D

Ditt fel uppstår när mappen som heter som variabeln 'username' inte finns. Anledningen är att FSO inte klarar att skapa två mappar på det sättet samtidigt.

Alltså, för att lägga till en fil i mappen 'kalle' som heter 'tjosan', måste mappen 'kalle' finnas, annars får du det där felet. :)

Medlem sedan mars 20015 287 inlägg
#4

Ok, det verkar logiskt, tips på hur jag skriver om funktionen för att typ skapa först en mapp sen den andra?

Medlem sedan mars 20015 287 inlägg
#5

Blir hyfsat tokig!

Denna kod:

<%
username = "bosse"
section = "martin"

	Call Makefolder(username)
	Call Makefolder(username & "\" & section)

Sub Makefolder(foldername)
	set fso = server.createobject("scripting.filesystemobject")

		foldername = server.mappath("upload") & "\" &  foldername & "\" 

			IF Not fso.FolderExists(foldername) then
				fso.CreateFolder foldername
			End If
	set fso = nothing
End Sub
%>

Körd rakt av ger den felet som står ovan:

Error Type:
Microsoft VBScript runtime (0x800A0034)
Bad file name or number

Kör jag först bara den översta "callen" samt sen efteråt den andra så fungerar det.
Det verkar som om mappen inte hinner skapas under tiden scritet körs och därför måste jag göra det i två steg...
Någon?

Medlem sedan feb. 200112 078 inlägg
#6

Det kan vara att mappen inte hinner skapas, som du säger. Windows tar ju ett par sekunder på sig att iaf. visa mappen i t.ex. utforskaren enligt vad jag vet, sen om det påverkar hur fort man kan accessa mappen, det har jag ingen aning om. :)

Jag tycker ändå att felet inte bör uppstå med tanke på att du köra en fileexists som tydligen returnerar true.

Medlem sedan juni 2002256 inlägg
#7
<%
username = "bosse"
section = "martin"

	Call Makefolder(username & "\" & section)

Sub Makefolder(foldername)
	set fso = server.createobject("scripting.filesystemobject")
	sFolder = Split(foldername,"\")
	sFolder = Split(foldername,"/")
		For i=0 To Ubound(sFolder)
		fLoc = fLoc&sFolder(i)&"/"
		myF = Server.Mappath("./"&fLoc)

			IF Not fso.FolderExists(myF) then
				fso.CreateFolder myF
			End If

			response.write(myF&"<br>")
		Next
	set fso = nothing
End Sub
%>

---------------------------------
tycker jag funkar skitbra =)

Medlem sedan mars 20015 287 inlägg
#8

Det där verkar fungera! :)

Om jag kallar på den såhär dock:

Call Makefolder(username & "\" & section)

Medlem sedan feb. 200112 078 inlägg
#9

Kanonfunktion det där. :)

Jag satt och funderade på något liknande, men jag hade tyvärr inte ork att skriva en egen.

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)