General information
Category:
Windows API functions
>>>>>Does anyone know an easy way yo use the APIs to retrieve file names in their "true" case (upper and lower, the same way we see them in Windows Explorer)? I want essentially the functionality that ADIR() achieves, but that VFP function returns all upper case.
>>>>>
>>>>>TIA,
>>>>>
>>>>>-- Randy
>>>>
>>>>Randy,
>>>>
>>>>Try this:
>>>>
>>>>DECLARE SHORT GetFileTitle IN COMDLG32;
>>>> STRING @lpszFile, STRING @lpszTitle, SHORT cbBuf
>>>>
>>>>lpszFile is the file or directory name you want the actual case for.
>>>>lpszTitle is a buffer large enough to hold the information.
>>>>cbBuf is the size of the buffer.
>>>>
>>>>For example:
>>>>
>>>>lcfile = "C:\ANYFILE.TXT"
>>>>lcbuffer = SPACE(200)
>>>>lnsize = LEN(lcbuffer)
>>>>= GetFileTitle(@lcfile, @lcbuffer, lnsize)
>>>>
>>>>With directories, be sure to strip off the end backslash if it exists.
>>>
>>>George,
>>>
>>>Looks promising. I take it you would just continue using ADIR() and then calling this function for each file in the array. That should be fast enough.
>>>
>>>Thanks for the reply.
>>>
>>>-- Randy
>>
>>This is a function that would be useful to me, however when I try the GetFileTitle example, lpszTitle does not end up in the case as it shows up in Windows Explorer (or by doing a dir in a dos window). If lcfile is in upper case, lpszTitle ends up in proper case, otherwise lpszTitle ends up in whatever case lcfile was when I called the function. I'm using VFP 5.0a with Window NT 4.0.
>>
>>Has anyone gotten this to work??
>
>Well, rather than replying to myself, I thought I'd attach this as an addendum.
>
>After playing around a bit with another API call, I've come up with this which *seems* to do the trick:
>
>DECLARE INTEGER FindFirstFile IN Win32API;
> STRING @lpFileName, STRING @lpFindData
>
>Here's how you initialize it:
>
>lpFileName should be the fully qualified path of the file you want to get the file name as displayed in the Explorer for.
>
>lpFindData should be initialized as:
>
>lcFindData = REPLICATE(CHR(0), 44) + REPLICATE(CHR(32), 260) + REPLICATE(CHR(32), 14)
>
>Next call the function with:
>
>lnhandle = FindFirstFile(@lcfile, @lcFindData)
>
>Beginning at position in the string, and continuing until the next occurrance of CHR(0) is the name.
>
>George
Thanks George, FindFirstFile does seem to do the trick.
Murray
Previous
Reply
View the map of this thread
View the map of this thread starting from this message only
View all messages of this thread
View all messages of this thread starting from this message only