vba - una - obtener ruta de carpeta c#
Encuentre la parte del directorio(menos el nombre del archivo) de una ruta completa en el acceso 97 (8)
Por varias razones, estoy atrapado en Access 97 y necesito obtener solo la ruta de acceso de una ruta de acceso completa.
Por ejemplo, el nombre
c:/whatever dir/another dir/stuff.mdb
debe convertirse
c:/whatever dir/another dir/
Este sitio tiene algunas sugerencias sobre cómo hacerlo: http://www.ammara.com/access_image_faq/parse_path_filename.html
Pero parecen bastante horribles. Debe haber una mejor manera, ¿verdad?
Eso es todo. No hay una función mágica incorporada ...
left (currentdb.Name, instr (1, currentdb.Name, dir (currentdb.Name)) - 1)
La función Dir devolverá solo la parte del archivo de la ruta completa. Currentdb.Name se usa aquí, pero podría ser cualquier cadena de ruta completa.
Siempre usé el FileSystemObject
para este tipo de cosas. Aquí hay una pequeña función de envoltura que utilicé. Asegúrese de hacer referencia al 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
Si solo necesita la ruta del MDB actualmente abierto en la IU de acceso, le sugiero que escriba una función que analice CurrentDB.Name y luego almacene el resultado en una variable estática dentro de la función. Algo como esto:
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
Esto tiene la ventaja de que solo recorre el nombre una vez.
Por supuesto, solo funciona con el archivo abierto en la interfaz de usuario.
Otra forma de escribir esto sería usar las funciones proporcionadas en el enlace dentro de la función anterior, por lo tanto:
Public Function CurrentPath() As String
Static strPath As String
If Len(strPath) = 0 Then
strPath = FolderFromPath(CurrentDB.Name)
End If
CurrentPath = strPath
End Function
Esto hace que la recuperación de la ruta actual sea muy eficiente mientras se utiliza el código que puede usarse para encontrar la ruta para cualquier nombre de archivo / ruta.
Esto parece funcionar Lo anterior no aparece en 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
Prueba esta función:
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
Si no desea eliminar la última barra invertida "/" al final de la ruta de la carpeta, cambie la última línea con esto:
FolderPath = Left(FilePath, Len(FilePath) - Len(FileName))
Ejemplo:
FolderPath("C:/Users/Christos/Desktop/LAT Analysers Signal Correction/1/TP 14_03_2013_5.csv")
da:
C: / Users / Christos / Desktop / LAT Analyzers Corrección de señal / 1
o
C: / Users / Christos / Desktop / LAT Analizadores Corrección de señal / 1 /
en el segundo caso (tenga en cuenta que hay una barra invertida al final).
Espero que ayude...
Usa estos códigos y disfrútalo.
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
Y aquí puedes llamar a la función:
Sub test()
Dim s
For Each s In GetDirectoryName("C:/New folder")
Debug.Print s
Next
End Sub
Puedes hacer algo simple como: Left(path, InStrRev(path, "/"))
Ejemplo:
Function GetDirectory(path)
GetDirectory = Left(path, InStrRev(path, "/"))
End Function