Tjena! Jag provade den här kodsnutten, och det fungerade på min dator. Jag provade ditt förslag, men får fortfarande bara samma svar. Det är ingen long som retuneras. Gissar att det är en variant som retuneras. Kanske är en Currency eller Decimal. Hur ser din partitionering ut av hårddisken? Jag har provat din kodsnutt också. Tyvärr utan annat resultat. Partitionering: Jag tog din kodsnutt: Prova med API istället: Underbart, det fungerade med API'n. Bra att du fick en fungerande lösning. Jag håller helt med om att det är lustigt. Håller med dig, det är svårt att släppa sådana här saker. Har installerat Service Pack 5 nu, och hittade en nyare SCRRUN.DLL: Hmm... behöver man inte referera till Microsoft Scripting Runtime?!? Jag har inte heller "lagt" till Microsoft Scripting Runtime i projektet. Nu är det löst! Gôtt att det löste sig, nu har du/vi ökat kunskapsbanken lite grann. Det är aldrig fel när man kommer på en lösning. Det är det som är roligt med programmering: att lösa problem. Precis!FileSystemObject
Jag har ett litet problem med FileSystemObject.
Hur returnerar jag storleken på min hårddisk. Den är 80 GB. Att returnera en disketts storlek är inga problem då den har så mycket mindre kapacitiet.
Jag får som svar att storleken i bytes är: 2147155968.
Vilket är väl runt 2 GB om jag inte misstar mig.
Jag använder mig av metoden ".TotalSize", kan inte den returnera ett värde större än datatypen Long, eller?
Tacksam för hjälp.
Mvh Stefan NilssonSv: FileSystemObject
Jag har också en 80 GB hårddisk.
<code>
Private Sub Form_Load()
Call ShowSpaceInfo("c:")
End Sub
Sub ShowSpaceInfo(drvpath)
Dim fs, d, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
s = "Drive " & d.DriveLetter & ":"
s = s & vbCrLf
s = s & "Total Size: " & FormatNumber(d.TotalSize / 1024, 0) & " Kbytes"
s = s & vbCrLf
s = s & "Available: " & FormatNumber(d.AvailableSpace / 1024, 0) & " Kbytes"
MsgBox s
End Sub
</code>
/HåkanSv: FileSystemObject
Så här ser det ut för både min C: och D: enhet...
Drive C:
Total Size: 2 096 832 KBytes
Available: 2 096 832 KBytes
Drive D:
Total Size: 2 096 832 KBytes
Available: 2 096 832 KBytes
Jag kör med VB 6, använder Windows ME. Det ska väl inte ha någon betydelse, eller?
Reference: Microsoft Scripting Runtime (SCRRUN.DLL)
/Mvh Stefan NilssonSv: FileSystemObject
Hoss mig fungerar det att använda Currency för min 30GByte stora disk:
<code>
Function HDDSize(DriveName As String) As Currency
Dim FSO As FileSystemObject
Dim Drive As Drive
Set FSO = New FileSystemObject
Set Drive = FSO.GetDrive(DriveName)
HDDSize = Drive.TotalSize
End Function
</code>Sv: FileSystemObject
Du har ju bevisligen något som är 2 GB stort!
Frågan är vad det är.
Hur stor är c: och d:??
Hur mycket av vardera används?
Gå in och titta via utforskaren för att se vad det är som är 2GB,
så blir det lättare att förstå vad du "hämtar i koden".
/HåkanSv: FileSystemObject
Antal bytes: 2147155968
Både på AvailableSpace och TotalSize.
Har det någon betydelse om man har partitionerat hårddisken?
Det här är ju sjukt... jag använder Professional Edition, i och för sig har jag ju inte installerat något service pack. Kan det kanske vara så att det är felet?
/Mvh Stefan NilssonSv: FileSystemObject
C:
Använt utrymme: 2 170 372 096 Bytes (2,02 GB)
Ledigt utrymme: 6 769 942 528 Bytes (6,30 GB)
Kapacitet: 8 940 314 624 Bytes (8,32 GB)
D:
Använt utrymme: 60 744 204 288 Bytes (56,5 GB)
Ledigt utrymme: 12 631 998 464 Bytes (11,7 GB)
Kapacitet: 73 376 202 752 Bytes (68,3 GB)
Det lustiga är att VolumeName stämmer ju in på D: enheten, fast jag får samma värden. Alltså måste det väl vara på D: enheten som jag utför kommandot på. Där finns ingenting som är i närheten av 2 GB.
/Mvh Stefan NilssonSv: FileSystemObject
Sub ShowSpaceInfo(drvpath)
Dim fs, d, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
s = "Drive " & d.DriveLetter & ":" & d.VolumeName
s = s & vbCrLf
s = s & "Total Size: " & FormatNumber(d.TotalSize / 1024, 0) & " Kbytes"
s = s & vbCrLf
s = s & "Available: " & FormatNumber(d.AvailableSpace / 1024, 0) & " Kbytes"
MsgBox s
End Sub
Private Sub Form_Load()
Call ShowSpaceInfo("c:")
End Sub
/Mvh Stefan NilssonSv: FileSystemObject
<code>
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Currency, lpTotalNumberOfBytes As Currency, lpTotalNumberOfFreeBytes As Currency) As Long
Private Sub Form_Load()
Dim r As Long, BytesFreeToCalller As Currency, TotalBytes As Currency
Dim TotalFreeBytes As Currency, TotalBytesUsed As Currency
Const RootPathName = "C:\" 'the drive to find
'get the drive's disk parameters
Call GetDiskFreeSpaceEx(RootPathName, BytesFreeToCalller, TotalBytes, TotalFreeBytes)
'show the results, multiplying the returned
'value by 10000 to adjust for the 4 decimal
'places that the currency data type returns.
Me.AutoRedraw = True
Me.Cls
Me.Print
Me.Print " Total Number Of Bytes:", FormatNumber(TotalBytes * 10000, 0) & " bytes"
Me.Print " Total Free Bytes:", FormatNumber(TotalFreeBytes * 10000, 0) & " bytes"
Me.Print " Free Bytes Available:", FormatNumber(BytesFreeToCalller * 10000, 0) & " bytes"
Me.Print " Total Space Used :", FormatNumber((TotalBytes - TotalFreeBytes) * 10000, 0) & " bytes"
End Sub
</code>Sv: FileSystemObject
Fast det är väldigt svårt att släppa varför det inte skulle fungera med FileSystemObject... Mycket frustrerande.
Tack Andreas för koden!
/Mvh Stefan NilssonSv: FileSystemObject
Håller med dig om att det är lite svårsmält varför det inte skulle fungera med FileSystemObjekt (hos dig), då det fungerar här hos mig.
Tydligen så var det det använda utrymmet på c: som visades.
Konstigt att det andra inte kom fram.
/HåkanSv: FileSystemObject
Jag letade reda på dll-filen SCRRUN.DLL på nätet för att se om jag hade en för gammal version, hittade den på en site som hade ett DLL-archive. Det visade sig dock att min version var nyare än deras. Så det kan väl knappast vara felet. Svårt att säga.
Min nuvarande version: 5.1.0.5010
Den jag hittade: 5.1.0.4615
Hämtar hem Service Pack 5, ska testa ifall det har någon inverkan.
Som sagt: svårt att släppa varför.
Tackar alla som hjälpt till. Skulle någon komma på vad som skulle kunna vara felet, så är jag mer än tacksam om jag får reda på det.
En sak är säker, jag kommer inte att ge mig. Gillar inte när sådana här dumma fel uppstår. Oftast brukar det ju bara vara en bagatell som man har missat någonstans. Men jag undrar i detta fall...
/Mvh Stefan NilssonSv: FileSystemObject
Jag har VB6 Enertprise edition SP 5.
Kollade upp versionen på min scrrun.dll,
den är nyare än din 5.6.0.6626.
Detta kan ju spela roll, samt även service packet.
Pröva igen när du fått hem SP 5, och hör av dig hur det gick.
/HåkanSv: FileSystemObject
Version 5.6.0.6012
Inte riktigt lika ny som din. Men det fungerar inte ändå. Ska försöka att hitta samma version som du har.
/Mvh Stefan NilssonSv: FileSystemObject
Jag kan nämligen köra koden utan att har en referens till den...
Mycket märkligt...
Någon mer som kan köra koden utan referens?
/Mvh Stefan NilssonSv: FileSystemObject
Du får "allt" när du gör anropet CreateObject("Scripting.FileSystemObject").
/Håkan
Sv: FileSystemObject
Nu fungerar det! Tjohoo!!
Jag kunde inte uppdatera dll-filen genom att kopiera över den i systemkatalogen, för windows skapade genast en ny (med den gamla versionen: 5.1.0.5010). Det spelade ingen roll om jag tog bort den, den kom en ny fil bara efter någon sekund.
Men jag läst lite på nätet om filen och kom fram till att den följer med följande produkter:
FILE INFORMATION:
Name: scrrun.dll
Description: Microsoft (r) Script Runtime
Version: 5.6.0.6626
DLLSelfRegister: Yes
TypeLib Guid: {420B2830-E718-11CF-893D-00A0C9054228}
TypeLib Version: 1.0
PRODUCTS CONTAINING THIS VERSION:
PRODUCT SIZE MOD DATE CAB/IEXPRESS RELATIVE PATH
Internet Explorer 6.0 147,512 6/26/2001 scr56en.cab
Internet Explorer 6.0 147,512 6/26/2001 scripten.cab
Microsoft Visual Studio .NET (2002) Enterprise Architect 147,512 6/26/2001 scr56en.cab \wcu\ie60
Microsoft Visual Studio .NET (2002) Enterprise Architect 147,512 6/26/2001 scripten.cab \wcu\ie60
Microsoft Visual Studio .NET (2002) Enterprise Developer 147,512 6/26/2001 scripten.cab \wcu\ie60
Microsoft Visual Studio .NET (2002) Enterprise Developer 147,512 6/26/2001 scr56en.cab \wcu\ie60
Microsoft Visual Studio .NET (2002) Professional 147,512 6/26/2001 scr56en.cab \wcu\ie60
Microsoft Visual Studio .NET (2002) Professional 147,512 6/26/2001 scripten.cab \wcu\ie60
Windows XP Home 2002 147,483 8/17/2001 \i386
Windows XP Professional 2002 147,483 8/17/2001 \i386
Så jag hämtade hem Internet Explorer 6.0 från Microsoft's hemsida, installerade det. Kontrollerade version på dll-filen, som nu är 5.6.0.6626
Hoppade in i VB och testade programmet. Det fungerade mycket fint.
Slutsats blir: att den gamla dll-filen innehåller bug eller något annat tokigt med den.
Det lustiga är att jag läste om FileSystemObject i en bok för VB 6, så det är lustigt att inte version som följer med VB 6 fungerar som den ska.
Skönt att få klarhet i problemet.
Tackar och bockar för all hjälp!
/Mvh Stefan NilssonSv: FileSystemObject
Jag har nyligen lagt in IE 6.0 därav (som du kom på) versionsnummret.
Bara att köra vidare, happy coding!! ;-))
/HåkanSv: FileSystemObject
Får väl hoppas att detta hjälper andra också ifall samma problem uppstår för dem.
Nu är det nog dags att försöka få sig lite skönhetssömn. Slapp man ligga vaken hela natten och grubbla på detta i alla fall.
Mvh Stefan NilssonSv: FileSystemObject
Programmering = 2 timmars svordomar och 2 minuters lycka (när allt faller på plats)!!
: -))
/Håkan