Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Proper Case File Names vs. ADIR()
Message
 
To
10/11/1997 17:07:38
Murray Mcintosh
Mammography Reporting System, Inc.
Seattle, Washington, United States
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00058492
Message ID:
00059543
Views:
35
>>>>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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform