>>>>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
George
Ubi caritas et amor, deus ibi est