Что нового

[Ошибки] Система не возвращает короткие имена файлов

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Кто-нибудь сталкивался с такой проблемой: Система не возвращает короткие имена/пути файлов.

Вот пример:
Код:
$ShortName=FileGetShortName("c:\Program Files\Common Files\Microsoft Shared\")
MsgBox(4096, "Короткое имя ",$ShortName)


Должно выдавать что-то типа C:\PROGRA~1\..., а возвращает:

autsh.png


Система Windows 7 x64
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Код:
If Not RegRead("HKLM\SYSTEM\CurrentControlSet\Control\FileSystem", 'NtfsDisable8dot3NameCreation') Then
    $ShortName = FileGetShortName("c:\Program Files\Common Files\Microsoft Shared\")
    MsgBox(4096, "Короткое имя ",$ShortName)
Else
    MsgBox(4096,'', "Ну и чего ты хотел, если у NTFS отключено сохранение коротких имен?")
EndIf
 
Автор
A

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Значение NtfsDisable8dot3NameCreation стояло 2 , изменил на 0 , но после перезагрузки всё тоже самое... короткие имена не возвращаются
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Честно говоря, не совсем в курсе как влияет на систему значение этого параметра равное 2 (имел дело только с 0 и 1), но, как написано на сайте microsoft:
Изменение параметра реестра NtfsDisable8dot3NameCreation влияет только на вновь созданные файлы, папки и профили. На уже существующие файлы это изменение не распространяется.
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
MrCreatoR Posted 23 August 2007 - 02:33 PM

Код:
If Not FileExists("c:\Program Files\Common Files\Microsoft Shared\") Then
	MsgBox(0, 'Error - FileExists', '0 if path/file does not exist.')
EndIf

$ShortName = _GetShortName("c:\Program Files\Common Files\Microsoft Shared\")
	MsgBox(4096, "Короткое имя ",$ShortName)


Func _GetShortName($sPath)
    If FileExists($sPath) Then Return FileGetShortName($sPath, 1)

    Local $RetPath = ""
    Local $TailingSlashs = StringRegExpReplace($sPath, '(?i)^.*[^\\]', '')

    If StringInStr($sPath, "\") Then
        Local $sPathArr = StringSplit($sPath, "\")
        For $i = 1 To UBound($sPathArr) - 1
            If StringLen($sPathArr[$i]) > 8 Then
                $RetPath &= StringLeft(StringStripWS($sPathArr[$i], 8), 6) & "~1\"
            Else
                $RetPath &= $sPathArr[$i] & "\"
            EndIf
        Next
        $RetPath = StringRegExpReplace($RetPath, '\\+\z', '')
        $RetPath &= $TailingSlashs
    Else
        If StringLen($sPath) > 8 Then
            $RetPath = StringLeft(StringStripWS($sPath, 8), 6) & "~1"
        Else
            $RetPath = $sPath
        EndIf
    EndIf
    Return StringUpper($RetPath)
EndFunc

Источник - http://www.autoitscript.com/
 
Верх