GetShortPathName()在XP SP3上不能正常工作
http://msdn.microsoft.com/en-us/library/aa364989(VS.85).aspx
返回path的inputstring,如:
C:TestLongFolderNametoTestWithBinarySearch.ini
完全一样发送?
Windows Azure支持除.NET以外的其他技术
Python 2.7.11 pip没有安装
DirectoryInfo.GetFiles()不返回所有文件
当间谍程序++不提供任何细节从软件提取时该怎么办?
然而:
C:Documents and SettingsLocalServiceNTUSER.DAT
然而:
C:Documents and SettingsLocalServiceBinarySearch.ini
不要从文件名中做一个简短的名字,但是为path做简短的名字!?
添加:
我需要能够将8.3path/文件名传递给旧版应用程序
如何才能做到这一点?
' ------------------------------------------------------------ ' Library Name: Microsoft Scripting Runtime 1.0 ' Library File: C:WINDOWSsystem32scrrun.dll ' ------------------------------------------------------------ ' Version Info: ' ------------- ' Company Name: Microsoft Corporation ' File Description: Microsoft (R) Script Runtime ' File Version: 5.7.0.16599 ' Internal Name: scrrun.dll ' Legal copyright: copyright (C) Microsoft Corp. 1996-2006,All Rights Reserved ' Original Filename: scrrun.dll ' Product Name: Microsoft (R) Script Runtime ' Product Version: 5.7.0.16599 ' ------------------------------------------------------------ ' ProgID: Scripting.FileSystemObject ' Interface Name: ScriptingFileSystemObject ' ' Interface Prefix: Scripting
这工作。
在BASIC中的简单实现将是:
$PROGID_ScriptingFileSystemObject = "Scripting.FileSystemObject" Interface dispatch ScriptingFileSystemObject Member CALL GetFile <&H0000271C>(IN FilePath AS STRING<&H00000000>) AS ScriptingIFile Member CALL GetFolder<&H0000271D>(IN FolderPath AS STRING<&H00000000>) AS ScriptingIFolder END Interface Interface dispatch ScriptingFile Member GET ShortPath<&H000003EA>() AS STRING Member GET ShortName<&H000003E9>() AS STRING END Interface Interface dispatch ScriptingFolder Member GET ShortPath<&H000003EA>() AS STRING Member GET ShortName<&H000003E9>() AS STRING END Interface '----------------------------------------------------------------------------- FUNCTION FileShortPath( BYVAL sPathnFile AS STRING,sShort AS STRING ) AS LONG LOCAL vResult,vFilePath AS Variant LOCAL fso AS ScriptingFileSystemObject LOCAL oFile AS ScriptingFile IF LEN(sPathnFile) = 0 THEN EXIT FUNCTION ' nothing sent SET fso = NEW ScriptingFileSystemObject IN $PROGID_ScriptingFileSystemObject IF Isnothing(fso) THEN FUNCTION = -1 : EXIT FUNCTION SET oFile = NEW ScriptingFile IN $PROGID_ScriptingFileSystemObject IF Isnothing(oFile) THEN FUNCTION = -2 : EXIT FUNCTION vFilePath = sPathnFile vResult = Empty OBJECT CALL fso.GetFile(vFilePath) TO vResult SET oFile = vResult IF Isnothing(oFile) THEN FUNCTION = -3 : EXIT FUNCTION vResult = Empty Object GET oFile.ShortName TO vResult sShort = VARIANT$(vResult) vResult = Empty Object GET oFile.ShortPath TO vResult sShort = VARIANT$(vResult) IF LEN(sShort) THEN FUNCTION = 1 ' Success END FUNCTION
谢谢大家的build议。
我仍然试图find一种可靠的方式来创build一个8.3path/文件名。
除了使用GETSHORTPATHNAME之外,还有什么办法可以做到吗?
解决了。 往上看
似乎MS继续支持这个只为COM deciples …为什么现在在C API不可靠仍然是一个谜。
Windows错误地认为cx_freeze冻结应用程序已经崩溃,当它只是结束
谷歌地图多点触摸捏和缩放(桌面)触摸电脑
我怎样才能让光盘在DVD ROM驱动器中旋转?
Node.js – 按文件types查找shell图标(windows)
C#启动应用程序进程而不偷窃重点
这是因为文件名不存在短名称,XP SP3不会自动为该文件创建简短名称。
您可以检查此注册表设置(如果存在)以查看当前设置为。
HKEY_LOCAL_MACHINE 系统 CurrentControlSet 控制 FileSystem的找到Ntfsdisable8dot3NameCreation
当Ntfsdisable8dot3NameCreation设置为1时,您将获得以下行为:
如果一个文件夹/文件已经有一个短名称,例如“Program Files”,那么它将返回该文件夹/文件的短名称。 但是,如果短名称不存在,您将取而代之为文件的长名称,因为它是该对象的唯一名称。 如果短名称被禁用,则没有短名称可以获得。
根据前面引用的文档,只有在Ntfsdisable8dot3NameCreation为0时才会生成短名称。如果值已更改,则可能只有一些文件/目录只有长名称。 这可以解释为什么您对GetShortPathName的调用可以使用短名称和文件的长名称。
我一直无法证实这一点,但我怀疑在Windows中可能有特殊的逻辑,总是会为“Documents and Settings”等关键目录创建短名称,因为如果没有这样做,某些古代程序可能会中断。
你有没有试过SetFileShortName ?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。