2009-09-13 8 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"가 표시되어야합니다.

코드를 수정하는 방법?

Scripting.FileSystemObject 구성 요소를 사용하는 것이 조금 청소기 VB6 코드 도움말

답변

3

이 필요합니다. 시도 :

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

2

David와 같은 FileSystemObject의 GetBaseName을 사용하면 좋습니다. FileSystemObject로 작업 할 수 없거나 원하지 않는 이유가 있다면 간단한 해결책이 있습니다. 이름의 마지막 점으로 시작하는 파일 이름 문자열에서 모든 문자를 제거합니다.

여기 내 말은 무엇을 : 당신의 이름은 확장 파일이 있지만 파일 이름 문자열에 어딘가에 점을 가지고하지 않습니다

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

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

경우,이 메소드는 나쁜 결과를 반환합니다.

관련 문제