Qokelate 发表于 2013-6-16 12:22:26

已解决 如何从未分配盘符的分区中复制文件?

本帖最后由 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 这类文件系统文件的方法

chenronting 发表于 2013-6-16 13:08:38

那是要操作分区底层了,好像那个鬼脸的大大,有做出过类似的东西。你可以搜索一下,分区。不过他那个没有写到操作那一步,只是罗列了文件出来。

lpxx 发表于 2013-6-16 18:48:38

学习了,可惜用处不大。

leibin0121 发表于 2013-6-22 09:22:43

楼主强大,感谢分享
页: [1]
查看完整版本: 已解决 如何从未分配盘符的分区中复制文件?