Как извлечь каталог из строки пути к файлу? - PullRequest
3 голосов
/ 18 июля 2009

Я хочу выбрать путь только из полного имени.

Например, C:\Newfolder\iTDC.mdb отображается в текстовом поле.

Но я хочу взять только C:\Newfolder, удалив iTDC.mdb.

Как пропустить файл?

Ответы [ 4 ]

8 голосов
/ 18 июля 2009

Быстро и грязно

Dim sPath As String

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

sPath = Left(sPath, InStrRev(sPath, "\"))
6 голосов
/ 18 июля 2009

Если вы добавите ссылку на Microsoft Scripting Runtime (используя Project-> References), то вы можете использовать FileSystemObject для выполнения операций с файлами. Например:

Dim oFSO as New FileSystemObject

strFolder = oFSO.GetFolder(strPath)

FileSystemObject также имеет другие полезные методы для составления путей (BuildPath) и для проверки существования файлов, папок и т. Д. (FileExists, FolderExists).

3 голосов
/ 20 июля 2009

Вы можете использовать функцию 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). По моему опыту, он иногда ломается на пользовательских машинах, возможно, потому что его ИТ-отдел параноидален в отношении вирусов. В shlwapi.dll есть других полезных функций , например. для проверки наличия папок или файлов .

0 голосов
/ 28 января 2016
' 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...