本帖最后由 Qokelate 于 2013-6-16 14:34 编辑
如题, 如果分区没有分配盘符,如何复制里面的文件? (保持不分配盘符状态下复制)
自己动手丰衣足食, 把 C: D: E: F: 等盘符替换为GUID路径后就是一样的操作了
FileVolumeStartup()
OnAutoItExitRegister('FileVolumeShutdown')
Local $aVolume = FileVolumeEnumGUIDPlus()
_ArrayDisplay($aVolume)
Exit
; 初始化 FileVolume
Func FileVolumeStartup()
Global $hKernel32DLL = DllOpen('Kernel32.dll')
EndFunc ;==>FileVolumeStartup
; 关闭 FileVolume
Func FileVolumeShutdown()
DllClose($hKernel32DLL)
$hKernel32DLL = 0
EndFunc ;==>FileVolumeShutdown
; 获取Volume搜索句柄
Func FileVolumeFindFirstVolume()
Local $API = DllCall($hKernel32DLL, "Handle", "FindFirstVolume", "str", "", "dword", 260)
If @error Or 0 = IsArray($API) Then Return SetError(1, 0, 0)
Return $API[0]
EndFunc ;==>FileVolumeFindFirstVolume
; 关闭Volume搜索句柄
Func FileVolumeFindVolumeClose($hSearch)
DllCall($hKernel32DLL, "int", "FindVolumeClose", "handle", $hSearch)
EndFunc ;==>FileVolumeFindVolumeClose
; 搜索 Volume
Func FileVolumeFindNextVolume($hSearch)
Local $API = DllCall($hKernel32DLL, "int", "FindNextVolume", "handle", $hSearch, "str", "", "dword", 260)
If @error Or 0 = IsArray($API) Then Return SetError(1, 0, '')
If Not $API[2] Then Return SetError(2, 0, '')
Return $API[2]
EndFunc ;==>FileVolumeFindNextVolume
; s 枚举所有Volume
Func FileVolumeEnumGUID()
Local $hSearch = FileVolumeFindFirstVolume()
If @error Then Return SetError(1, 0, '')
Local $szVolume, $str_List
While 1
$szVolume = FileVolumeFindNextVolume($hSearch)
If @error Then ExitLoop
$str_List &= $szVolume & @CRLF
WEnd
FileVolumeFindVolumeClose($hSearch)
Return $str_List
EndFunc ;==>FileVolumeEnumGUID
; a 枚举所有Volume
Func FileVolumeEnumGUIDPlus()
Local $str_List = FileVolumeEnumGUID()
If @error Then Return SetError(1, 0, 0)
$str_List = StringRegExpReplace($str_List, '^\s+|\s+$', '')
Local $aVolume = StringSplit($str_List, @CRLF, 1)
Return $aVolume
EndFunc ;==>FileVolumeEnumGUIDPlus
示例 枚举Volume1 下的所有文件(不含子目录)
FileVolumeStartup()
OnAutoItExitRegister('FileVolumeShutdown')
Local $aVolume = FileVolumeEnumGUIDPlus()
_ArrayDisplay($aVolume)
Local $aFile=_FileListToArray($aVolume[1])
_ArrayDisplay($aFile)
Exit
另外求能得到 $MFT $Extend 这类文件系统文件的方法 |