如何从文件路径字符串中提取目录?

3
我想仅从完全限定名称中选择路径。
例如,文本框中显示了 C:\Newfolder\iTDC.mdb
但我只想取 C:\Newfolder,将 iTDC.mdb 移除。
如何跳过文件?
4个回答

8

快速而粗略

Dim sPath As String

sPath = "C:\Newfolder\iTDC.mdb"

sPath = Left(sPath, InStrRev(sPath, "\"))

2
请注意,如果字符串中没有反斜杠,则代码将引发错误。 - MarkJ

6

如果您添加了对Microsoft Scripting Runtime的引用(使用Project->References),则可以使用FileSystemObject进行文件相关操作。例如:

Dim oFSO as New FileSystemObject

strFolder = oFSO.GetFolder(strPath)

FileSystemObject 还有其他有用的方法,用于组合路径(BuildPath),以及测试文件、文件夹等是否存在(FileExistsFolderExists)。


3
您可以使用PathRemoveFileSpec函数,该函数在Windows 2000和98的每个版本中都可用。这里提供了VB6实现。
Private Declare Function PathRemoveFileSpec Lib "Shlwapi" _
  Alias "PathRemoveFileSpecW" (ByVal szPath As Long) As Long

'Convert input file path to drive & directory only. (Supports UNC too) '    
Function sPathOnly(ByVal sInput As String) As String
  Dim sWorking As String
  sWorking = sInput
  If (PathRemoveFileSpec(StrPtr(sWorking)) <> 0) Then
    'Call succeeded. Trim trailing Null '
    sPathOnly = sTrimNull(sWorking)
  Else
    sPathOnly = sWorking
  End If
End Function

'Trim trailing null characters (e.g. from a string returned from an API call) '
Function sTrimNull(ByVal sIn As String) As String
  Dim iZeroCharacter As Long
  iZeroCharacter = InStr(sIn, Chr$(0))
  If iZeroCharacter > 0 Then
    sTrimNull = Left$(sIn, iZeroCharacter - 1)
  Else
    sTrimNull = sIn
  End If
End Function

我倾向避免使用 Microsoft Scripting Runtime(包括 FileSystemObject)。根据我的经验,在用户机器上,它偶尔会出现问题,可能是因为他们的 IT 部门对病毒很警惕。在 shlwapi.dll 中有其他有用的功能,例如测试文件夹是否存在文件是否存在

0
' GetFilenameWithoutExtension:  Return filename without extension from complete path
Public Function GetFilenameWithoutExtension(path As String) As String
    Dim pos As Integer
    Dim filename As String
    pos = InStrRev(path, "\")
    If pos > 0 Then
        filename = Mid$(path, pos + 1, Len(path))
        GetFilenameWithoutExtension = Left(filename, Len(filename) - Len(Mid$(filename, InStrRev(filename, "."), Len(filename))))
    Else
        GetFilenameWithoutExtension = ""
    End If
End Function

' GetFilenameWithExtension: Return filename with extension from complete path
Public Function GetFilenameWithExtension(path As String) As String
    Dim pos As Integer
    pos = InStrRev(path, "\")
    If pos > 0 Then
        GetFilenameWithExtension = Mid$(path, pos + 1, Len(path))
    Else
        GetFilenameWithExtension = ""
    End If
End Function


' GetDirectoryFromPathFilename: Return directory path contain filename
Public Function GetDirectoryFromPathFilename(path As String) As String
    Dim pos As Integer
    pos = InStrRev(path, "\")
    If pos > 0 Then
        GetDirectoryFromPathFilename = Left$(path, pos)
    Else
        GetDirectoryFromPathFilename = ""
    End If
End Function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接