2009-09-13 53 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但在文件名字符串中有一個點的地方,則此方法將返回錯誤結果。