[RED]<%
Function ShowAvailableSpace(drvPath)
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive(fso.GetDriveName(drvPath))
ShowAvailableSpace = "<b>Disk:</b> "& UCase(drvPath) &" - "& d.VolumeName &"<br><b>Utrymme:</b> "& FormatNumber(d.AvailableSpace/1024, 0) &" Kbytes"
Set d = Nothing
Set fso = Nothing
End Function
Response.Write ShowAvailableSpace("c:")
%>[/RED]
Om du vill ha fram "Size on disk" för en mapp så måste du:
1. Kolla hur många kluster varje enskild fil upptar.
2. Gånga med klusterstorleken för den aktuella driven.
3. Summera alla filer.
Hur många kluster en fil upptar kan du inte få fram med FSO, däremot kan du ju mygla lite (och bortse från att filerna kan vara fragmenterade eller komprimerade) och helt enkelt avrunda varje fil uppåt till närmast påbörjat kluster:
Fast annars förstår jag egentligen inte varför den informationen är särskilt intressant?
/red: Gör ett experiment och skapa en mapp med två textfiler med 1 tecken i varje. Mappens storlek är nu 2 bytes. Mappens storlek på disk är däremot 8192 bytes = 2*4096 bytes. Ser du systemet?
niko. Intressant idé att räkna ut klusterstorleken men det känns omöjligt. Har en mapp där size är 50mb medans size on disk är 64mb. relationen däremellan skiljer mellan olika mappar.
Men detta beror kanske på att hårddisken inte är defraggad eller liknande ??..
Att räkna ut klusterstorleken är inte omöjligt. Skapa en fil i anteckningar med 1 tecken och kolla "Size on disk". Där har du din klusterstorlek. Problemet blir ju sen att du blir tvungen att loopa över samtliga filer i alla mappar och summera, men det går ju om man vill.
Har en mapp där size är 50mb medans size on disk är 64mb. relationen däremellan skiljer mellan olika mappar.
Naturligtvis skiljer sig relationen mellan olika mappar?
Många små filer -> Stor skillnad.
Få stora filer -> Liten skillnad.
Den maximala skillnaden per fil är ju 4095 bytes och detta avrundas alltid uppåt.
Men detta beror kanske på att hårddisken inte är defraggad eller liknande ??..
Fragmentering ska nog inte vara nån större felkälla om vi inte talar våldsam fragmentering. Har du däremot NTFS-komprimering påslagen så kan du helt glömma metoden ovan.
<%
dim fso
set fso = server.createobject("scripting.filesystemobject")
lSizeOnDisk=0
const CLUSTER_SIZE=4096 ' Ändra eventuellt.
function GetSizeOnDisk(path)
dim folder, folders, files, file
set folder = fso.getfolder(path)
set files = folder.files
for each file in files
if Fix(file.size/CLUSTER_SIZE)-file.size/CLUSTER_SIZE=0 then
lSizeOnDisk=lSizeOnDisk+(Fix(file.size/CLUSTER_SIZE))*CLUSTER_SIZE
else
lSizeOnDisk=lSizeOnDisk+(Fix(file.size/CLUSTER_SIZE)+1)*CLUSTER_SIZE
end if
next
set folders = folder.subfolders
for each f in folders
GetSizeOnDisk f.path
next
end function
GetSizeOnDisk(Server.MapPath("/"))
response.write Server.MapPath("/") & " upptar " & lSizeOnDisk & " bytes på disk "
Set folder = fso.GetFolder(Server.MapPath("/"))
response.write "och " & folder.Size & " bytes i verkligheten.<br>"
%>
.. så helt "omöjligt" är det väl inte.
258 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91