找回密码
 加入
搜索
查看: 3548|回复: 4

[AU3基础] 已解决 如何从未分配盘符的分区中复制文件?

[复制链接]
发表于 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[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 这类文件系统文件的方法
发表于 2013-6-16 13:08:38 | 显示全部楼层
那是要操作分区底层了,好像那个鬼脸的大大,有做出过类似的东西。你可以搜索一下,分区。不过他那个没有写到操作那一步,只是罗列了文件出来。
发表于 2013-6-16 18:48:38 | 显示全部楼层
学习了,可惜用处不大。
发表于 2013-6-22 09:22:43 | 显示全部楼层
楼主强大,感谢分享
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 01:23 , Processed in 0.082067 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表