VB 高手请进

Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

Private Sub Form_Load()
Text1.Text = GetDiskFreeSpace("F:\", lpRootPathName, lpSectorsPerCluster, lpNumberOfFreeClusters, lpTtoalNumberOfClusters)
End Sub

请问这个为什么输出的值是1
还有本人的目的是想得到硬盘的大小!要是有好心人的话请给段代码!OK后追加赏金!

你没有理解GetDiskFreeSpace函数的用法,这个函数的返回值,并非是剩余字节数,而是一个表示函数是否执行成功的Long型变量,如果不成功则返回0,否则为非零值。你直接调用,自然出错。

仔细看函数的参数,各参数意义如下:
参数 类型及说明
lpRootPathName String,不包括卷名的一个磁盘根路径
lpSectorsPerCluster Long,用于装载一个簇内扇区数的变量
lpBytesPerSector Long,用于装载一个扇区内字节数的变量
lpNumberOfFreeClusters Long,用于装载磁盘上剩余簇数的变量
lpTtoalNumberOfClusters Long,用于装载磁盘上总簇数的变量

也就是说,当执行完这个函数后,函数将得到的磁盘信息分别存在了lpSectorsPerCluster、lpBytesPerSector、lpNumberOfFreeClusters、lpTtoalNumberOfClusters四个参数名称对应的变量中,并将执行是否成功的情况作为返回值。具体的空间数需要根据四个参数的值来计算.

范例:

Option Explicit
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

Private Sub Form_Load()
Dim SectorsPerCluster As Long '一个簇内扇区数
Dim BytesPerSector As Long '一个扇区内字节数
Dim NumberOfFreeClusters As Long '剩余簇数
Dim TotalNumberOfClusters As Long '总簇数
Dim FreeKBytes As Long '剩余KB数
Dim TotalKBytes As Long '总KB数
Dim Result
Result = GetDiskFreeSpace("F:\", SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters)
FreeKBytes = (NumberOfFreeClusters / 1024) * SectorsPerCluster * BytesPerSector
TotalKBytes = (TotalNumberOfClusters / 1024) * SectorsPerCluster * BytesPerSector
Text1.Text = FreeKBytes
Text2.text = TotalKBytes
End Sub

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

另外,再告诉你一种简便的方法,在“引用”中添加“Microsoft Scripting Runtime”后,可直接调用FSO对象来实现你要的功能:

Private Sub Form_Load()
Dim objFso As New FileSystemObject, Drv As Drive
Set objDrv = objFso.GetDrive("f:\")
If objDrv.IsReady Then
TotalSpace = Format(objDrv.TotalSize / (2 ^ 20), "0.00")
Else
TotalSpace = 0
End If
Set objFso = Nothing
Set objDrv = Nothing
Text1.Text = TotalSpace & " M"
End Sub
温馨提示:内容为网友见解,仅供参考
无其他回答

vb 高手请进,加载问题
原因可能有两种:1、另一台电脑没有安装VB程序,可能缺少程序执行需要的库文件,你可以先将程序打成安装包,再复制到另一台电脑,安装后就可以运行了。2、另一台电脑安装了VB程序,但编写的程序中需要加载某些文件,而这台电脑没有对应的文件,你只需要将加载的文件(路径也要一致)复制到另一台电脑。

VB Get使用疑问 (高手请进)
错了,读取2进制数据时并不判断它是什么变量类型,而是直接把读取的数据存放到储存指定变量的内存块中 如:Open FileName For Binary As #1 Dim i As Long '\/\/长整型变量,4个字节 Get #1, 4, i '\/\/从文件中读4个字节的数据,存放到储存i的内存块中。Close #1 Get是不会去判断数据的类型的...

vb高手请进,模拟Select Case 语句.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If TextBox1.Text = "" Or TextBox2.Text = "" Then MsgBox("正确输入先") Exit Sub End If Dim k As Integer Select Case TextBox2.Text Case "一" k = 1 Case "二...

关于VB,高手请进
1.托盘,网上都有代码,有的有写添加、删除、修改之托盘的代码,在和死的时候使用就可以了 2.可以用shell,点一下Label就shell("C:\\Program Files\\Internet Explorer\\IExplore.exe 网址"就可以了。对于超链接,.net比较简单 多加的问题:Me.WindowsState = 2 ...

VBA高手请进!怎么去掉单元格字符串首未空格?
不能用TRIM函数,不然全部空格都会删除。要用LTRIM函数、RTRIM函数组合使用。LTRIM() 是去除字符首位的空格(不论有几个空格)RTRIM() 是去除字符尾部的空格(不论有几个空格)如二楼的回答,把Trim(c.Value) 改成 LTrim(RTrim(c.Value)) 即可。

VB高手请进,一些基础题,实在不知道求答案!
1.在Visual Basic 中可以建立下拉式菜单和__右键_菜单。2.在文件对话框中,FileName属性与FileTitle属性是有区别的,假定有一个名为“Js.txt”的文件,位于“C:\\teacher"目录下,则FileTitle属性的值为___文本文件___,FileName属性的值为__JS.txt__。3.假定有一个通用对话框 CommonDialog1,...

VB高手请进!生成的EXE文件 总是用不了 出现:run-time error 3709...
你可以msdn一下 VB有两个DLL文件 是支持库 你拷到你exe目录下就好了

vb高手请进
其中,upperbound为上限,lowerbound为下限。例如,要生成5至10的随机整数,可使用:Int(6 * Rnd + 5)。实际应用中,RND为伪随机数,可通过设定可变种子,如时间,实现真正的随机性。若需生成偶数,可先通过INT确保结果为整数,然后进行偶数判断或再次随机。正确实现需注意随机数的生成机制及结果的处理...

vb高手请进(有高分)
我试验过了,你把For n = 1 To 6改成For n = 1 To 1000,然后下面加上一局C=0,则会打印出6,28,496这三个数字了 问题解决了,最后看你能加多少高分咯~最后再提醒下,记得把你的form的autoredraw属性设置成true,否则无法在屏幕打印的,你就看不到结果了 ...

VB高手请进,小弟无尽感激!
不太明白楼主的意思,你所指的保存那一页是什么概念?那页的内容?还是什么?再说没有用户名和密码我们也进不了啊。如果是想在VB里登录的话,可以借用wininet.dll里的一系列API。

相似回答
大家正在搜