---
title: "FSO Mappstorlek"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/82996-fso-mappstorlek"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Melea"
published: "2003-07-29T15:11:06.000Z"
updated: "2003-07-31T12:07:12.000Z"
replies: 20
views: 685
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/82996-fso-mappstorlek"
---

# FSO Mappstorlek

_Sida 1 av 2._

## #1 — Melea, 2003-07-29T15:11Z

Hejsan! :)

**1\.**

Ännu en fråga om FSO...

Jag hittade ett script här på wF som listar alla subdirs i en katalog och visar hur stora de är...

Nu vill jag göra så storleken endast visas på den mappen jag är i.
Så här ser koden ut i nuläget:

```
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Inetpub\wwwroot\Creative\files\")
Set subFolders = folder.SubFolders
count = 1
Response.ContentType = "text/xml"
Response.Write "<?xml version=""1.0""?>" & Vbcrlf
Response.Write "<system>" & Vbcrlf
For Each folderObject in SubFolders
	Call Skriv(folderObject.Name, folderObject.Size)
	count = count + 1
Next
Response.Write "</system>" & Vbcrlf

Sub Skriv(namn, size)
	Response.Write "<webbplats id=""" & count & """>" & Vbcrlf & "<katalog>" & namn & "</katalog>" _
	& Vbcrlf & "<sizemb>" & CInt(size / 1024) & "</sizemb>" & Vbcrlf & "</webbplats>" & Vbcrlf
End Sub

Set subFolders = Nothing
Set folder = Nothing
Set fso = Nothing
%>
```

**2\.**

Går det och begränsa storleken på en mapp så användaren enbart kan lägga upp 2 mb? Och isåfall hur?

MVH

Permalänk: https://www.webforum.nu/p/82996

## #2 — solbulle, 2003-07-29T17:18Z

1\.

```
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Inetpub\wwwroot\Creative\files\")

count = 1
Response.ContentType = "text/xml"
Response.Write "<?xml version=""1.0""?>" & Vbcrlf
Response.Write "<system>" & Vbcrlf

	Call Skriv(folder.Name, folder.Size)

Response.Write "</system>" & Vbcrlf

Sub Skriv(namn, size)
	Response.Write "<webbplats id=""" & count & """>" & Vbcrlf & "<katalog>" & namn & "</katalog>" _
	& Vbcrlf & "<sizemb>" & CInt(size / 1024) & "</sizemb>" & Vbcrlf & "</webbplats>" & Vbcrlf
End Sub

Set folder = Nothing
Set fso = Nothing
%>
```

Permalänk: https://www.webforum.nu/p/1123215

## #3 — Jesper T, 2003-07-29T17:32Z

Har inte en aning hur man gör det med xml, men någon slags enkel if-sats borde ju göra susen.

Permalänk: https://www.webforum.nu/p/1123222

## #4 — Melea, 2003-07-29T18:24Z

Solbulle, jag får detta felmeddelande:

```
Det går inte att visa XML-sidan 
Det går inte att visa XML-indata med formatmallen XSL. 
Korrigera felet och klicka sedan på knappen Uppdatera eller försök igen senare. 

--------------------------------------------------------------------------------

Sluttaggen head matchar inte starttaggen link. 
Det gick inte att behandla resursen 
[url]http://localhost/creative/counter-strike/admin.asp?login=yes&show=files&editID=1.[/url]
Rad 13, Position 3 
 

</head>
--^
```

Aldrig sett ngt liknande innan, vad kan felet vara?
\*Redigerat
*Om jag klickar på länken utan att ha räknaren i dokumentet funkar det och sen när jag klistrar in räknaren och sedan uppdaterar funkar det också, men det strular när jag trycker på länken till dokumentet, när jag har koden i dokumentet...*

Jesper T: joa, du fick mig på rätt väg, ska se vad jag kan göra åt det nu, tack! :)

**3\.**
En fråga till... hur gör jag If satsen? jag har försökt med 

```
If ScriptObject.GetFile(Server.MapPath(MyFile)).size > "2000" then
Session("fel") = "Du har bara 2 mb att använda till filer"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID & " "
End If
```

men det funkar inge vidare, förslag?

MVH

Permalänk: https://www.webforum.nu/p/1123244

## #5 — solbulle, 2003-07-29T20:53Z

3\.

If ScriptObject.GetFile(Server.MapPath(MyFile)).size \> 2000 then

borde väl fungera.

Angående det andra, hur ser hela koden ut nu?

Permalänk: https://www.webforum.nu/p/1123379

## #6 — Melea, 2003-07-29T21:28Z

som du skrev innan:

```
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Inetpub\wwwroot\Creative\files\")

count = 1
Response.ContentType = "text/xml"
Response.Write "<?xml version=""1.0""?>" & Vbcrlf
Response.Write "<system>" & Vbcrlf

	Call Skriv(folder.Name, folder.Size)

Response.Write "</system>" & Vbcrlf

Sub Skriv(namn, size)
	Response.Write "<webbplats id=""" & count & """>" & Vbcrlf & "<katalog>" & namn & "</katalog>" _
	& Vbcrlf & "<sizemb>" & CInt(size / 1024) & "</sizemb>" & Vbcrlf & "</webbplats>" & Vbcrlf
End Sub

Set folder = Nothing
Set fso = Nothing
%>
```

**3\.**
får felmeddelandet:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'Server.MapPath'

MVH

Permalänk: https://www.webforum.nu/p/1123418

## #7 — solbulle, 2003-07-29T22:57Z

Nu är jag inte riktigt med igen...

Vi börjar från slutet med 3:an.

Jag antar att det beror på att din variabel Myfile inte innehåller något, eller innehåller ett felaktig värde, namn.
Kör du det där i typ denna funktion/sub <http://www.webforum.nu/showthread.php?s=&postid=686736#post686736> eller?

PS.
Nu när jag kikar närmare på just den funktionen ser jag att just Myfile är ett väldigt dumt variabelnamn där, eftersom du använder det till annat i ditt skript.
( Function getFileSize(MyFile) )

Det andra felet du undrar över verkar vara någon sorts xml-fel som jag inte har den blekaste aning om vad det kan vara.
Den kod som asp-skriptet genererar, ser den ok ut?

Du skriver: 

> Om jag klickar på länken utan att ha räknaren i dokumentet funkar det och sen när jag klistrar in räknaren och sedan uppdaterar funkar det också, men det strular när jag trycker på länken till dokumentet, när jag har koden i dokumentet...

Det tolkar jag som om att det finns mer kod i den sidan, är det inte där du får något fel då?
Använder du sessions eller querystrings som du plockar ner på den sidan?

Permalänk: https://www.webforum.nu/p/1123470

## #8 — Melea, 2003-07-30T06:51Z

Så här ser koden ut med MyFile variablen etc.

```
<%
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
'Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))
byteCount = Request.TotalBytes
'Response.BinaryWrite(Request.BinaryRead(varByteCount))

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest RequestBin

editID =  UploadRequest.Item("editID").Item("Value")
username =  UploadRequest.Item("username").Item("Value")
datum =  Now()

contentType = UploadRequest.Item("filename").Item("ContentType")
filepathname = UploadRequest.Item("filename").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("filename").Item("Value")

'Create FileSytemObject Component

If Session("access") = "2" then
If byteCount=>500000 THEN
Session("fel") = "Den måste vara mindre än 500kb!"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID & " "
End If
End If

dim filesys, newfolder, newfolderpath
newfolderpath = Server.MapPath("../../files/") & "\" & Session("username") 
set filesys=CreateObject("Scripting.FileSystemObject") 
If  Not filesys.FolderExists(newfolderpath) Then
   Set newfolder = filesys.CreateFolder(newfolderpath) 
End If

Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

'Create and Write to a File
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
' Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd)&filename)
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("/Creative/files/" & Session("username") & "/" & filename))

If ScriptObject.GetFile(Server.MapPath(MyFile)).size > "2000" then
Session("fel") = "Du har bara 2 mb att använda till filer"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID & " "
End If

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next

Function getFileSize(MyFile)
Set fil = ScriptObject.GetFile(Server.MapPath(MyFile))
storlek = fil.size
getFileSize = round((storlek / 1024),2)
Set fil = Nothing
End Function

storlek = getFileSize("/Creative/files/" & Session("username") & "/" & filename)

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Driver={MySQL ODBC 3.51 Driver};server="&strserver&";uid="&struser&";pwd="&strpass&";database="&strdb&"" 

	sql = "insert into files (filename, username, datum, storlek) values ('" & filename & "', '" & username & "','" & datum & "','" & storlek & "')"
	Connect.Execute(sql),,128

	Connect.Close : Set objConnect = Nothing

MyFile.Close
```

Ska det spela någon roll om man använder variablen MyFile i två olika "script" i koden?

Sen angående det andra så funkar koden utmärkt utan själva räknaren. Just den här delen (ifsatsen) av dokumentet öppnas upp med querystring medans en del (ifsats) längre ner i dokumentet öppnas upp med where username = '" & lcase(Session("username")) & "'

Som sagt, koden funkar utmärkt när jag inte använder

```
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Inetpub\wwwroot\Creative\files\")

count = 1
Response.ContentType = "text/xml"
Response.Write "<?xml version=""1.0""?>" & Vbcrlf
Response.Write "<system>" & Vbcrlf

	Call Skriv(folder.Name, folder.Size)

Response.Write "</system>" & Vbcrlf

Sub Skriv(namn, size)
	Response.Write "<webbplats id=""" & count & """>" & Vbcrlf & "<katalog>" & namn & "</katalog>" _
	& Vbcrlf & "<sizemb>" & CInt(size / 1024) & "</sizemb>" & Vbcrlf & "</webbplats>" & Vbcrlf
End Sub

Set folder = Nothing
Set fso = Nothing
%>
```

Den funkar också när jag bara klistrar in koden direkt när jag redan är på sidan! Och sedan uppdaterar... Det är när jag trycker på länken till sidan som jag får XML felet...

MVH

Permalänk: https://www.webforum.nu/p/1123527

## #9 — Gladh, 2003-07-30T06:56Z

Du kan inte begärnsa användares möjlighet att lägga upp Max 2 MB så som du tänkt dig.

Du kanske kan (beroende på hur man laddar upp filerna) göra så att man inte kan ladda upp fler filer om du har mer än 2 MB i mappen.

Men om mappen är tom och jag får ladda upp, så kan jag ju ladda upp en fil som är på 100 MB och när du sedan kollar hur stor mappen är, så är den större än 2 MB så jag får inte ladda upp mer, men innehållet är större än 2 MB.

För att begränsa så att man endast kan ha 2 MB MAX måste du använda något Quota system, Win2000/Win2003 har detta inbyggt så man kan sätta det så att en viss användare endast får ha 2 MB filer på servern (eller om det var per folder).

\- M

Permalänk: https://www.webforum.nu/p/1123529

## #10 — solbulle, 2003-07-30T10:32Z

Han kan visst begränsa ungefär så som han har tänkt sig.
Han kan antingen kolla hur mycket utrymme allt tar efter uppladdningen och radera den nyss uppladdade filen, eller smartare, kolla först hur mycket som är lagrat och kolla om det plus storleken på den fil som just laddas upp håller sig under 2mb.
Han har ju även en spärr som gör att man ej kan ladda upp filer större än 500kb.

Angående variabeln Myfile, visst går det väl att använda samma namn, men det är ju som upplagt för förväxlingar.
I ditt fall har det blivit lite tokigt när du försöker kolla totala mappstorleken, det är inte objektet MyFile du ska använda dig av. Du ska använda sökvägen till den mapp som ska storlekskollas.

Testa detta:

```
If ScriptObject.GetFile(Server.MapPath(newfolderpath)).size > 2000 then
Session("fel") = "Du har bara 2 mb att använda till filer"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID
End If
```

Permalänk: https://www.webforum.nu/p/1123610

## #11 — Gladh, 2003-07-30T11:03Z

Missade spärren på 500 Kb. :(

\- M

Permalänk: https://www.webforum.nu/p/1123636

## #12 — Melea, 2003-07-30T17:05Z

Solbulle, tack för ditt tålamod men nu får jag det här felmeddelandet:

Feltyp:
Server.MapPath(), ASP 0172 (0x80004005)
Parametern Path för metoden MapPath måste vara en virtuell sökväg. En fysisk sökväg har använts.

MVH

Permalänk: https://www.webforum.nu/p/1123864

## #13 — Jesper T, 2003-07-30T17:47Z

server.mappath("../din_mapp/")
är en virituell sökväg, kontrollera vad variabeln "newfolderpath" innehåller.

Permalänk: https://www.webforum.nu/p/1123889

## #14 — solbulle, 2003-07-30T18:13Z

Aj, man lever inte som man lär direkt...
Så här skulle det ju vara... tror jag...

```
If ScriptObject.GetFile(newfolderpath).size > 2000 then
Session("fel") = "Du har bara 2 mb att använda till filer"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID
End If
```

"Vi" har ju redan gjort server.mappath och fått fram sökvägen i just variabeln newfolderpath, det var därför jag tänkte att vi skulle utnyttja den igen.
Men då behöver vi ju givetvis inte, som Jesper T påpekar, använda oss av server.mappath igen.

Permalänk: https://www.webforum.nu/p/1123898

## #15 — Melea, 2003-07-30T18:36Z

Jag bytte ut lite saker i koden.
"Vi" hade inte gjort så 2000 var / 1024 så jag multiplicerade 2000 med 1024 och fick ut 2048000, så jag bytte ut 2000 mot det talet.

Nu ser koden ut såhär:

```
If ScriptObject.GetFile(Server.MapPath("../../files/") & "\" & Session("username")).size > "2048000" then
Session("fel") = "Du har bara 2 mb att använda till filer"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID
End If
```

Men nu får jag felmeddelandet:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A0035)
Det går inte att hitta filen.

Permalänk: https://www.webforum.nu/p/1123904

## #16 — Fredde Mannen, 2003-07-30T18:41Z

Kolla först hur stor mappen är innan du låter dem göra en uppladdning, eftersom du kan läsa ut hur stor deras mapp är, så kolla först storleken på den fil som laddas upp. 

Och om den aktuella mappens storlek plus den nya filens storlek överstiger 1024\*2000 bytes så radera filen, eller stoppa uppladdningen.

Permalänk: https://www.webforum.nu/p/1123905

## #17 — Melea, 2003-07-30T18:43Z

Har du några tips eller ideér på hur jag ska kolla hur stor mappen är? Är ganska kass på asp än sålänge men jag lär mig :)

Solbulle: jag bytte ut koden mot:

```
If Server.MapPath("../../files/") & "\" & Session("username").size > "2048000" then
Session("fel") = "Du har bara 2 mb att använda till filer"
Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID
End If
```

eftersom det inte är ngn fil "vi" anropar men då står det:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A01A8)
Objekt krävs.: 'Session(...)'

Permalänk: https://www.webforum.nu/p/1123909

## #18 — solbulle, 2003-07-31T10:27Z

Stuvade om lite...

```
'först lite formulärhämtning o grejer..

Set MyFile = ScriptObject.CreateTextFile(newfolderpath & "/" & filename)

mappstorlek = getFolderSize(newfolderpath)

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next

MyFile.Close

storlek = getFileSize(newfolderpath & "\" & filename)

If mappstorlek + storlek > 2000 then
	Session("fel") = "Du har bara 2 mb att använda till filer, du har nu " & mappstorlek & "kb uppladdat."
	'Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID
	response.write "Du har bara 2 mb att använda till filer, du har nu " & mappstorlek & "kb uppladdat."

	deleteFile(newfolderpath & "\" & filename)
End If

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Driver={MySQL ODBC 3.51 Driver};server="&strserver&";uid="&struser&";pwd="&strpass&";database="&strdb&"" 

	sql = "insert into files (filename, username, datum, storlek) values ('" & filename & "', '" & username & "','" & datum & "','" & storlek & "')"
	Connect.Execute(sql),,128

	Connect.Close : Set objConnect = Nothing

Function getFolderSize(strfolder) 
Set folder = ScriptObject.GetFolder(strfolder)
storlek = folder.size
getFolderSize = round((storlek / 1024),2)
Set folder = Nothing
End Function

Function getFileSize(strfilen)
Set fil = ScriptObject.GetFile(strfilen)
storlek = fil.size
getFileSize = round((storlek / 1024),2)
Set fil = Nothing
End Function

Function deleteFile(strfilen)
Set fileObject = ScriptObject.GetFile(strfilen)
fileObject.Delete
Set fileObject = Nothing
End Function

'resterande subbar med själva uppladdningsprylarna.
```

Permalänk: https://www.webforum.nu/p/1124316

## #19 — Melea, 2003-07-31T11:02Z

Man tackar! Det funkar perfekt, ska bara fixa en funktion som tar bort det ur databasen också...

Just nu tas filen bort men datan lagras i databasen...
Det borde väl inte vara så svårt?

Bara o lägga till:

sql = " delete from files where id = " & editID & " "
Connect.Execute(SQL)

efter den sista raden i din kod ovan?

\*Redigerat
*Det funkar inte, var ska jag lägga koden? :D*

MVH

Permalänk: https://www.webforum.nu/p/1124330

## #20 — solbulle, 2003-07-31T12:03Z

Hupp, det tänkte jag inte på, lägg till inläggandet i if-satsen så.

```
If mappstorlek + storlek > 2000 then
	Session("fel") = "Du har bara 2 mb att använda till filer, du har nu " & mappstorlek & "kb uppladdat."
	'Response.Redirect "../admin.asp?login=yes&show=files&editID=" & editID
	response.write "Du har bara 2 mb att använda till filer, du har nu " & mappstorlek & "kb uppladdat."

	deleteFile(newfolderpath & "\" & filename)
Else

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Driver={MySQL ODBC 3.51 Driver};server="&strserver&";uid="&struser&";pwd="&strpass&";database="&strdb&"" 

	sql = "insert into files (filename, username, datum, storlek) values ('" & filename & "', '" & username & "','" & datum & "','" & storlek & "')"
	Connect.Execute(sql),,128

	Connect.Close : Set objConnect = Nothing

End If
```

Permalänk: https://www.webforum.nu/p/1124374

---

Tråden på webben: https://www.webforum.nu/amne/asp/82996-fso-mappstorlek  
Nästa sida: https://www.webforum.nu/amne/asp/82996-fso-mappstorlek/page2.md
