检测硬盘大小并记录到ini
本帖最后由 ac5474012 于 2009-6-10 09:01 编辑问题很简单,如果去掉了下面中的两个Sleep(1000)程序就只会记录一个硬盘的大小。这是为什么?如何解决?
$cppf = DriveGetDrive("FIXED")
If Not @error Then
;MsgBox(4096, "", "找到 " & $cppf & " 个驱动器")
For $i = 1 To $cppf
;MsgBox(4096, "驱动器 " & $i, $cppf[$i])
Local $pf
$pf = $cppf[$i]
;MsgBox(4096, "驱动器的盘符样子 " ,$pf&"\")
$kj = DriveSpaceTotal($pf & "\")
Sleep(1000)
;MsgBox(4096, $pf & " 的空间:", $kj & " MB")
$sxdx = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & ":" & @MIN & ":" & @SEC
$kykj = DriveSpaceFree($pf & "\")
Sleep(1000)
;MsgBox(4096, $pf & " 的可用空间:", $kykj & " MB")
IniWrite(@ScriptDir & "\空间.ini", "磁盘空间", "检测时间 " & $sxdx, $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
Next
EndIf 本帖最后由 lynfr8 于 2009-6-9 18:20 编辑
你对脚本运算时间和系统时间还有IniWrite的用法理解不够深
1.IniWrite ( "文件名", "字段名", "关键字", "值" ) 其中参数‘值’为要写入/修改的数值.
当目标文件并不存在,则程序将自动创建该文件,关键字和字段将被添加到后面部分
好好读读这句话:
可得知IniWrite是先写入关键字和字段,然后再读字段,再根据字段写入相应的‘值’
如果字段是存在的话,
IniWrite只会执行修改‘值’,而不会再建同样一个字段再写入值(好好理解这里!)
不信?检测下就知道了$cppf = DriveGetDrive("FIXED")
$sxdx = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & ":" & @MIN & ":" & @SEC
If Not @error Then
For $i = 1 To $cppf
Local $pf
$pf = $cppf[$i]
$kj = DriveSpaceTotal($pf & "\")
Sleep(1000)
$kykj = DriveSpaceFree($pf & "\")
Sleep(1000)
IniWrite(@ScriptDir & "\空间.ini", "磁盘空间" , "检测时间 ", $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
Next
EndIf
看,是不是加了sleep都没用,还是只能获得最后一个盘符的检测数据?
看回到你的代码:"检测时间 " & $sxdx,$sxdx是你获取的系统时间,精确到秒了
在循环语句里,你的思路是循环获取系统时间然后和‘检测时间’一起写入字段,然后和相应的值写入ini,思路是对的
问题就出现在脚本的循环语句运算速度是非常快的,比你获得的系统时间秒还要快得多了
想想cpu浮点运算速度就知道了,如果是双核的甚至是8核的就更不用说了
这样你的循环语句获得的系统时间是相同的,写入的字段也是一样的
自然IniWrite就只执行‘值’的修改,导致你得到最后一个盘符的检测数据了!
但是当你就加入sleep之后,获取的系统时间就不同了,
只要slepp(100)1秒以上IniWrite都会执行‘值’的写入而不是修改,
因为你的字段已经可以根据系统时间区分开来了
2.不加sleep的解决方法
关键:修改IniWrite语句中的字段IniWrite(@ScriptDir & "\空间.ini", "磁盘空间" , $i&"检测时间 "& $sxdx, $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)或者用比秒更精确的TimerDiff来区分时间
$cppf = DriveGetDrive("FIXED")
$sxdx = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & ":" & @MIN & ":" & @SEC
If Not @error Then
For $i = 1 To $cppf
Local $pf,$dif
$begin = TimerInit()
$pf = $cppf[$i]
$kj = DriveSpaceTotal($pf & "\")
$kykj = DriveSpaceFree($pf & "\")
$dif = TimerDiff($begin)
IniWrite(@ScriptDir & "\空间.ini", "磁盘空间" , "检测时间 "&$sxdx&$dif, $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
Next
EndIf有时候,细细琢磨帮助文件的定义是非常有帮助的... 2# lynfr8
高人那!!!、
楼主的慢死了
相反lynfr8的,又快有好,实力的差别 稍微改一下,这样美观了
$cppf = DriveGetDrive("FIXED")
$sxdx = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & ":" & @MIN & ":" & @SEC & "|"
If Not @error Then
For $i = 1 To $cppf
Local $pf,$dif
$begin = TimerInit()
$pf = $cppf[$i]
$kj = DriveSpaceTotal($pf & "\")
$kykj = DriveSpaceFree($pf & "\")
$dif = TimerDiff($begin)
IniWrite(@ScriptDir & "\空间.txt", "磁盘空间" , "检测时间 "&$sxdx&"反应时间 "&$dif, $pf & "盘 全部空间为: " & $kj & " 可用空间为: " & $kykj)
Next
EndIf
页:
[1]