Heenan, Lambert
Lambert.Heenan at AIG.com
Wed Oct 22 17:09:40 CDT 2003
Well here is my little GetPath routine which does not use InstrRev either, but seems a lot simpler than yours. It also returns the same results as your function ... Function GetPath(aPath) As String ' Strips the path name from the supplied file and path name ' leaves the trailing slash on there Dim foo As Integer, aSlash As Integer aSlash = 0 foo = InStr(aPath, "\") While (foo > 0) aSlash = foo foo = InStr(aSlash + 1, aPath, "\") Wend If aSlash > 0 Then GetPath = Left$(aPath, aSlash) Else GetPath = aPath End If End Function This little routine was written before I'd written a version of InstrRev for Access97... Function InStrR(varText As Variant, strFind As String) As Integer Dim n As Integer, nStart As Integer n = Len(strFind) If IsNull(varText) Or n = 0 Then InStrR = 0 Exit Function End If nStart = Len(varText) - n While nStart > 0 n = InStr(nStart, varText, strFind) If n = 0 Then nStart = nStart - 1 Else InStrR = n Exit Function End If Wend InStrR = 0 End Function Lambert > -----Original Message----- > From: Gustav Brock [SMTP:gustav at cactus.dk] > Sent: Wednesday, October 22, 2003 3:54 PM > To: AccessD at databaseadvisors.com > Subject: [AccessD] Get path from full file name > > Hi all > > We had a need for a bulletproof method to retrieve the path from a > full filename or from a path with no filename. > Much to my surprise, all the "quickies" I could locate around the net > (including so called expert and guru sites) and the FileSystem object > as well fail for one or more common structures like UNC paths and/or > relative paths. > > Also, this was for "air" filenames which may not yet exist so any use > of Dir() and the like was out of the question. Further, InStrRev() > could not be used as it was for A97. > > Below is the function. Any comments - indeed those on bugs or > misbehaviour - are appreciated. > > Beware of line breaks. > > /gustav > > PS: A _really_ freaky class implementation which I didn't even > consider to port and test is found here: > > http://www.xbeat.net/vbspeed/cod_GetChris.htm > > <code> > > Public Function GetPathOfFile(ByVal strFile As String) As String > > ' Returns path of full filename. > ' Accepts relative path and UNC names. > > ' Examples: > ' > ' c:\name c:\ > ' c:\name\ c:\name\ > ' c:\name\file c:\name\ > ' c:name c: > ' c:name\ c:name\ > ' c:name\file c:name\ > ' c: c: > ' c:\ c:\ > ' \name \ > ' \name\ \name\ > ' \name\file \name\ > ' .\ .\ > ' .\name .\ > ' .\name\ .\name\ > ' .\name\file .\name\ > ' ..\ ..\ > ' ..\name ..\ > ' ..\name\ ..\name\ > ' ..\name\file ..\name\ > ' \\fs1 \\fs1 > ' \\fs1\ \\fs1\ > ' \\fs1\name \\fs1\ > ' \\fs1\name\ \\fs1\name\ > ' \\fs1\name\file \\fs1\name\ > ' vbNullString vbNullString > > ' 2003-10-21. Cactus Data ApS. CPH. > > Const cstrChrBackslash As String * 1 = "\" > Const cstrChrColon As String * 1 = ":" > Const clngUNCHeader As Long = 2 > > Dim lngPos As Long > Dim lngPosPrev As Long > Dim lngPosMin As Long > Dim strPath As String > > If StrComp(Left(strFile, clngUNCHeader), String(clngUNCHeader, > cstrChrBackslash), vbBinaryCompare) = 0 Then > ' Full name is an UNC path. > ' Skip leading double slash. > lngPosMin = clngUNCHeader > End If > ' Search for last backslash in full name. > Do > lngPosPrev = lngPos > lngPos = InStr(1 + lngPos + lngPosMin, strFile, cstrChrBackslash, > vbBinaryCompare) > Loop While lngPos > 0 > > If lngPosPrev > 0 Then > ' UNC server or drive letter. Path specified in full. > strPath = Left(strFile, lngPosPrev) > ElseIf lngPosMin = 0 Then > ' Current (not known) dir of drive. > ' Return drive letter only with no trailing backslash. > strPath = Left(strFile, InStr(strFile, cstrChrColon)) > Else > ' UNC server name only. > strPath = strFile > End If > > GetPathOfFile = strPath > > End Function > > </code> > > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com