找回密码
 加入
搜索
楼主: afan

[系统综合] 获取畸形文件夹的短文件名

[复制链接]
发表于 2010-4-6 13:23:14 | 显示全部楼层
回复 77# afan

那就记不得了,我再好好翻翻,印象里有
 楼主| 发表于 2010-4-6 14:04:49 | 显示全部楼层
本来长文件名和短文件名就没有必然的对应关系(后6字符)
只是在 $mtf 目录结构里生成了一个标记而已,
用 ...
dtooboss 发表于 2010-4-6 12:49



    谢谢,有空研究下~
 楼主| 发表于 2010-4-6 14:05:45 | 显示全部楼层
回复  afan

那就记不得了,我再好好翻翻,印象里有
netegg 发表于 2010-4-6 13:23



    好的,谢谢~
发表于 2010-4-6 16:27:14 | 显示全部楼层
学习了,谢谢A大
发表于 2010-4-6 16:47:49 | 显示全部楼层
本帖最后由 C.L 于 2010-4-6 16:52 编辑
本来长文件名和短文件名就没有必然的对应关系(后6字符)
只是在 $mtf 目录结构里生成了一个标记而已,
用 ...
dtooboss 发表于 2010-4-6 12:49


SetFileShortName,这个好象只能在NTFS文件系统上用吧,FAT应该是用不了的。
另处请教一下,这个畸形文件的句柄:$hFile 怎么获得?对这个句柄,我不知道怎么获得。

Au3里的filegetshortname 应该就是调用GetFileShortName的吧?这个我是猜的。呵呵~
发表于 2010-4-6 17:35:23 | 显示全部楼层
SetFileShortName,这个好象只能在NTFS文件系统上用吧,FAT应该是用不了的。
另处请教一下,这个畸形文 ...
C.L 发表于 2010-4-6 16:47


这里有详细的程序例子。往下看。

http://topic.csdn.net/u/20080315 ... c-f4cca34f44ce.html
 楼主| 发表于 2010-4-6 17:37:20 | 显示全部楼层
这里有详细的程序例子。往下看。
dtooboss 发表于 2010-4-6 17:35



    这个看过,一看局限于NTFS或底层驱动立即返回~
发表于 2010-4-6 17:53:19 | 显示全部楼层
下面是测试结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-6 18:01:55 | 显示全部楼层




这个又命名了几个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-4-6 18:15:59 | 显示全部楼层
这个看过,一看局限于NTFS或底层驱动立即返回~
afan 发表于 2010-4-6 17:37

底层驱动可以用dllcall调用,肯定不是难事,在au3里也就几行语句。
fat基本可以淘汰了。
 楼主| 发表于 2010-4-6 18:18:51 | 显示全部楼层
底层驱动可以用dllcall调用,肯定不是难事,在au3里也就几行语句。
fat基本可以淘汰了。
dtooboss 发表于 2010-4-6 18:15



    U盘大多是FAT,硬盘的话也应保留一个FAT分区~
底层驱动我是鸟都不懂,还是用回我的得~
发表于 2010-4-6 22:34:52 | 显示全部楼层
回复 88# afan

呵呵,看来想要在Win下面用的话,想找个稳定一点的方法有困难,对这个畸形文件夹,还是DOS有用~~
 楼主| 发表于 2010-4-6 22:37:31 | 显示全部楼层
回复  afan

呵呵,看来想要在Win下面用的话,想找个稳定一点的方法有困难,对这个畸形文件夹,还是DOS有 ...
C.L 发表于 2010-4-6 22:34



    呵呵,没办法呀~ 你那个琢磨出了看得到却拿不到,唉~
发表于 2010-4-6 23:07:57 | 显示全部楼层
试试这个行不行???哈哈!!!!



在下发现,在下使用_fileslisttoarray这个东东是可以看到的!再加上Afan前辈有那个_FileGetShortName函数,就可以这样子了!
#include <File.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListBox.au3>


#Region ### START Koda GUI section ### Form=E:\4_au3\K型文件夹\畸形文件夹.kxf
$Form1 = GUICreate("畸形文件夹", 394, 251, 363, 359)
$Label1 = GUICtrlCreateLabel("要搜索畸形文件夹的路径:", 8, 8, 139, 17)
$Input1 = GUICtrlCreateInput("", 152, 6, 177, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button1 = GUICtrlCreateButton("浏览", 336, 4, 51, 25)
$Group1 = GUICtrlCreateGroup("畸形文件夹", 8, 32, 377, 193)
$List1 = GUICtrlCreateList("", 16, 48, 361, 162)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $var = FileSelectFolder("请选择:", "")
                        If Not @error Then
                                GUICtrlSetData($List1,"")
                                GUICtrlSetData($Input1, $var)
                                $_var = StringSplit($var, "")
                                If $_var[0] <= 2 Then
                                        $dir = _FileListToArray($var)
                                        For $i = 1 To $dir[0]
                                                $kfile = StringRight($dir[$i], 1)
                                                If $kfile = "." Then
                                                        $k=StringSplit(_FileGetShortName($var & $dir[$i]),"")
                                                        GUICtrlSetData($List1, $k [$k[0]]& "|")
                                                EndIf
                                        Next
                                Else
                                        $var&=""
                                                $dir = _FileListToArray($var)
                                        For $i = 1 To $dir[0]
                                                $kfile = StringRight($dir[$i], 1)
                                                If $kfile = "." Then
                                                        $k=StringSplit(_FileGetShortName($var & $dir[$i]),"")
                                                        GUICtrlSetData($List1, $k[$k[0]] & "|")
                                                EndIf
                                        Next
                                EndIf
                        EndIf

        EndSwitch

WEnd

Func _FileGetShortName($FilePath, $Flag = 1)
        $FilePath = StringRegExpReplace($FilePath, '\\+$', '')
        If $Flag <> 1 Then $Flag = 0
        If FileExists($FilePath) And Not StringRegExp($FilePath, '\.+$') Then
                If $Flag = 1 Then Return FileGetShortName($FilePath, 1)
                Return StringRegExpReplace(FileGetShortName($FilePath, 1), '.+\\', '')
        EndIf
        Local $Path, $File
        If StringInStr($FilePath, ':') Then
                $Path = StringRegExpReplace($FilePath, '\\[^\\]+$', '')
                $File = StringRegExpReplace($FilePath, '.+\\', '')
        Else
                $Path = @ScriptDir
                If StringInStr($FilePath, '\') Then $Path &= '\' & StringRegExpReplace($FilePath, '\\[^\\]+$', '')
                $File = StringRegExpReplace($FilePath, '.+\\', '')
        EndIf
        $File = StringRegExpReplace($File, '(\.|\+|\(|\)|\{|\}|\[|\]|\^|\$)', '\\$1')
        Local $str = '', $too
        $too = Run(@ComSpec & ' /c dir /A /x "' & $Path & '"', '', 0, 2)
        While 1
                Sleep(1)
                $str &= StdoutRead($too)
                If @error Then ExitLoop
        WEnd
        If Not StringRegExp($str, '<DIR>.+\s' & $File & '\r') Then Return SetError(1, 0, 0)
        Local $ShortName = StringRegExpReplace($str, '(?s).+<DIR>\s+?([^\s]+)\s+?' & $File & '.+', '$1')
        If @extended = 0 Then Return SetError(1, 0, 0)
        If $Flag = 1 Then Return FileGetShortName($Path, 1) & '\' & $ShortName
        Return $ShortName
EndFunc   ;==>_FileGetShortName

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-4-6 23:17:04 | 显示全部楼层
回复 91# 天堂泪吻泪

用我的本来就是可以啊,我就是想看看有没有别的方法~ O(∩_∩)O~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-28 19:23 , Processed in 0.097388 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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