2009-09-13 48 views
-1

使用VB6如何只获取文件名?

代码。

Dim posn As Integer, i As Integer 
    Dim fName As String 
    posn = 0 
    For i = 1 To Len(flname) 
     If (Mid(flname, i, 1) = "\") Then posn = i 
    Next i 
    fName = Right(flname, Len(flname) - posn) 
    posn = InStr(fName, ".") 
     If posn <> 0 Then 
      fName = Left(fName, posn - 1) 
     End If 
    GetFileName = fName 



FileName: Clockings8.mis06042009 120442.fin 

但它显示的文件名是“Clockings8”。它应该显示“Clockings8.mis06042009 120442”

如何修改代码?

需要VB6代码帮助

回答

3

这是一个有点清洁使用Scripting.FileSystemObject组件。请尝试:

Dim fso as New Scripting.FileSystemObject 
GetFileName = fso.GetBaseName(fname) 

您的代码停止短的原因是InStr从字符串的开始到结束,停止在找到匹配的位置。文件名“Clockings8.mis06042009 120442.fin”包含两个句点。因此,您应该使用InStrRev来从字符串的末尾开始搜索。

+1

还有[GetFileName](https://msdn.microsoft.com/en-us/library/office/gg264499.aspx),其中包括扩展名(以保存其他人像我一样搜索,谁需要VB6相当于'Path.FileName') – dlatikay 2017-02-27 13:18:27

2

使用FileSystemObject的GetBaseName像David一样建议是个好主意。如果你不能或者不想(或者你不想)为什么不想使用FileSystemObject,那么有一个简单的解决方案:从文件名字符串中的最后一个点开始,删除所有字符。

这里就是我的意思是:

Dim fn As String 
fn = "Clockings8.mis06042009 120442.fin" 

Dim idx As Integer 
idx = InStrRev(fn, ".") 
GetFileName = Mid(fn, 1, idx - 1) 

如果你的文件名不具有extenstion但在文件名字符串中有一个点的地方,则此方法将返回错误结果。