Подтвердить что ты не робот

Найти часть каталога (минус имя файла) полного пути в доступе 97

По разным причинам я застрял в Access 97 и должен получить только часть пути полного пути.

Например, имя

c:\whatever dir\another dir\stuff.mdb

должен стать

c:\whatever dir\another dir\

На этом сайте есть несколько предложений о том, как это сделать: http://www.ammara.com/access_image_faq/parse_path_filename.html

Но они кажутся довольно отвратительными. Должен быть лучший способ, верно?

4b9b3361

Ответ 1

Что об этом. Не существует волшебной встроенной функции...

Ответ 2

Вы можете сделать что-то простое: Left(path, InStrRev(path, "\"))

Пример:

Function GetDirectory(path)
   GetDirectory = Left(path, InStrRev(path, "\"))
End Function

Ответ 3

Я всегда использовал FileSystemObject для такого рода вещей. Вот небольшая функция обертки, которую я использовал. Обязательно обратитесь к Microsoft Scripting Runtime.

Function StripFilename(sPathFile As String) As String

'given a full path and file, strip the filename off the end and return the path

Dim filesystem As New FileSystemObject

StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"

Exit Function

End Function

Ответ 4

Это похоже на работу. Вышеуказанное не относится к Excel 2010.

Function StripFilename(sPathFile As String) As String
'given a full path and file, strip the filename off the end and return the path
Dim filesystem As Object

Set filesystem = CreateObject("Scripting.FilesystemObject")

StripFilename = filesystem.GetParentFolderName(sPathFile) & "\"

Exit Function

End Function

Ответ 5

левый (currentdb.Name, Instr (1, currentdb.Name, реж (currentdb.Name)) - 1)

Функция Dir вернет только часть файла полного пути. Здесь используется Currentdb.Name, но это может быть любая полная строка пути.

Ответ 6

Если вам просто нужен путь к MDB, который в настоящее время открыт в пользовательском интерфейсе доступа, я бы предложил написать функцию, которая анализирует CurrentDB.Name, а затем сохраняет результат в переменной Static внутри функции. Что-то вроде этого:

Public Function CurrentPath() As String
  Dim strCurrentDBName As String
  Static strPath As String
  Dim i As Integer

  If Len(strPath) = 0 Then
     strCurrentDBName = CurrentDb.Name
     For i = Len(strCurrentDBName) To 1 Step -1
       If Mid(strCurrentDBName, i, 1) = "\" Then
          strPath = Left(strCurrentDBName, i)
          Exit For
       End If
    Next
  End If
  CurrentPath = strPath
End Function

Это имеет то преимущество, что он только один раз проецирует имя.

Конечно, он работает только с файлом, который открывается в пользовательском интерфейсе.

Другим способом написать это будет использование функций, предоставляемых в ссылке внутри функции выше, таким образом:

Public Function CurrentPath() As String
  Static strPath As String

  If Len(strPath) = 0 Then
     strPath = FolderFromPath(CurrentDB.Name)
  End If
  CurrentPath = strPath
End Function

Это делает получение текущего пути очень эффективным при использовании кода, который можно использовать для поиска пути для любого имени файла/пути.

Ответ 7

Попробуйте эту функцию:

Function FolderPath(FilePath As String) As String

    '--------------------------------------------------
    'Returns the folder path form the file path.

    'Written by:    Christos Samaras
    'Date:          06/11/2013
    '--------------------------------------------------

    Dim FileName As String

    With WorksheetFunction
        FileName = Mid(FilePath, .Find("*", .Substitute(FilePath, "\", "*", Len(FilePath) - _
                    Len(.Substitute(FilePath, "\", "")))) + 1, Len(FilePath))
    End With

    FolderPath = Left(FilePath, Len(FilePath) - Len(FileName) - 1)

End Function

Если вы не хотите удалять последнюю обратную косую черту "\" в конце пути к папке, измените последнюю строку следующим образом:

FolderPath = Left(FilePath, Len(FilePath) - Len(FileName))

Пример:

FolderPath("C:\Users\Christos\Desktop\LAT Analysers Signal Correction\1\TP 14_03_2013_5.csv")

дает:

C:\Users\Christos\Desktop\LAT Анализаторы Коррекция сигнала \1

или

C:\Users\Christos\Desktop\LAT Анализаторы Коррекция сигнала \1\

во втором случае (обратите внимание, что в конце есть обратная косая черта).

Надеюсь, это поможет...

Ответ 8

Используйте эти коды и наслаждайтесь им.

Public Function GetDirectoryName(ByVal source As String) As String()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection

Dim source_file() As String
Dim i As Integer        

queue.Add fso.GetFolder(source) 'obviously replace

Do While queue.Count > 0
    Set oFolder = queue(1)
    queue.Remove 1 'dequeue
    '...insert any folder processing code here...
    For Each oSubfolder In oFolder.SubFolders
        queue.Add oSubfolder 'enqueue
    Next oSubfolder
    For Each oFile In oFolder.Files
        '...insert any file processing code here...
        'Debug.Print oFile
        i = i + 1
        ReDim Preserve source_file(i)
        source_file(i) = oFile
    Next oFile
Loop
GetDirectoryName = source_file
End Function

И здесь вы можете вызвать функцию:

Sub test()
Dim s
For Each s In GetDirectoryName("C:\New folder")
Debug.Print s
Next
End Sub