虽然在 Windows95/98 中已经都可以使用长文件名/目录 (最长可以到255个字节),但是在您将长文件名的文件或目录存文件时,系统同时给了它一个可以相容于以前 MS-DOS 时代的 8.3 格式的文件名称!
到目前为止,还是有些软件会使用 8.3 格式的文件名称,在安装这些软件时,它们写到注册文件中的资料,仍然采用 8.3 格式的文件名称,所以有时候,您在维护系统时,必须知道目前这些已经转成 8.3 格式的文件名称,原来的长文件名是什么。
在 问题:如何将长文件名转成短文件名格式 (MS-DOS 8.3) ,我们已经讲过长文件名转成短文件名,当时是使用 API 来做,过程上还蛮麻烦的,但是相反的,要从短文件名转成长文件名,过程却比较简单,也不需要用到 API,只要使用 Dir( ) 就可以了!
到目前为止,还是有些软件会使用 8.3 格式的文件名称,在安装这些软件时,它们写到注册文件中的资料,仍然采用 8.3 格式的文件名称,所以有时候,您在维护系统时,必须知道目前这些已经转成 8.3 格式的文件名称,原来的长文件名是什么。
在 问题:如何将长文件名转成短文件名格式 (MS-DOS 8.3) ,我们已经讲过长文件名转成短文件名,当时是使用 API 来做,过程上还蛮麻烦的,但是相反的,要从短文件名转成长文件名,过程却比较简单,也不需要用到 API,只要使用 Dir( ) 就可以了!
程序代码: |
'请将以下的模组放到声明区中:
Public Function GetLongFilename(ByVal sShortName As String) As String
Dim sLongName As String
Dim sTemp As String
Dim iSlashPos As Integer
'在短文件名之后加上倒斜线 "\",避免 Instr 造成错误
sShortName = sShortName & "\"
'略过磁盘代号,从第四码开始
iSlashPos = InStr(4, sShortName, "\")
'从文件名之第四码之后,一段一段处理在二个倒斜线 "\"之间的字串转换
While iSlashPos
sTemp = Dir(Left$(sShortName, iSlashPos - 1), vbNormal + vbHidden + vbSystem + vbDirectory)
If sTemp = "" Then 'Error 52 - Bad File Name or Number
GetLongFilename = ""
Exit Function
End If
sLongName = sLongName & "\" & sTemp
iSlashPos = InStr(iSlashPos + 1, sShortName, "\")
Wend
'将转换后的文件名加上原先略过的磁盘代号,变成完整的全路径文件名
GetLongFilename = Left$(sShortName, 2) & sLongName
End Function
'实际使用范例如下:
Private Sub Command1_Click()
'假设 C:\Program Files\Common Files 是一个正确的全路径文件名或目录
Print GetLongFilename("C:\PROGRA~1\COMMON~1")
End Sub
'结果就是 C:\Program Files\Common Files。
Public Function GetLongFilename(ByVal sShortName As String) As String
Dim sLongName As String
Dim sTemp As String
Dim iSlashPos As Integer
'在短文件名之后加上倒斜线 "\",避免 Instr 造成错误
sShortName = sShortName & "\"
'略过磁盘代号,从第四码开始
iSlashPos = InStr(4, sShortName, "\")
'从文件名之第四码之后,一段一段处理在二个倒斜线 "\"之间的字串转换
While iSlashPos
sTemp = Dir(Left$(sShortName, iSlashPos - 1), vbNormal + vbHidden + vbSystem + vbDirectory)
If sTemp = "" Then 'Error 52 - Bad File Name or Number
GetLongFilename = ""
Exit Function
End If
sLongName = sLongName & "\" & sTemp
iSlashPos = InStr(iSlashPos + 1, sShortName, "\")
Wend
'将转换后的文件名加上原先略过的磁盘代号,变成完整的全路径文件名
GetLongFilename = Left$(sShortName, 2) & sLongName
End Function
'实际使用范例如下:
Private Sub Command1_Click()
'假设 C:\Program Files\Common Files 是一个正确的全路径文件名或目录
Print GetLongFilename("C:\PROGRA~1\COMMON~1")
End Sub
'结果就是 C:\Program Files\Common Files。
VB部分相关文章推荐
※VB禁止使用 Alt-Tab 或 Ctrl-Alt-Del
※VB控件注册 - 利用资源文件将dll、ocx打包进exe文件
※VB:设定 MsgBox 在若干时间之后若无回应则自动关闭
※VB:读取及设定NumLock/CapsLock/ScrollLock的值
※在vb中使用Iphlpapi.dll获取网络信息(下) 更多精彩 >>>