已解决 如何从未分配盘符的分区中复制文件?
本帖最后由 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
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 Then Return SetError(2, 0, '')
Return $API
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)
_ArrayDisplay($aFile)
Exit
另外求能得到 $MFT $Extend 这类文件系统文件的方法 那是要操作分区底层了,好像那个鬼脸的大大,有做出过类似的东西。你可以搜索一下,分区。不过他那个没有写到操作那一步,只是罗列了文件出来。 学习了,可惜用处不大。 楼主强大,感谢分享
页:
[1]