Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Proper Case File Names vs. ADIR()
Message
From
11/11/1997 12:54:58
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:
00059554
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

Thanks George, FindFirstFile does seem to do the trick.

Murray
Previous
Reply
Map
View

Click here to load this message in the networking platform