Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Getting the a file name with proper case
Message
 
To
18/03/2003 08:10:08
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00766432
Message ID:
00767221
Views:
29
Thanks Gregory,

I don't like to rely on the scripting host because this is a vertical app and it may not be installed on older platforms. The other code worked well without the requirement.

+++ Rick ---


>Rick,
>
>Never used it but the FileSystemObject works as well as far I can see. May be a bit slower, since you are creating objects
>
>
>fso = CreateObject('Scripting.FileSystemObject')
>fx = fso.GetFile('..\..\tmp\2003vkt.pdf')
>?fx.Name && 2003VKT.pdf
>?fx.Path && C:\tmp\2003VKT.pdf
>?fx.ShortPath && C:\tmp\2003VKT.pdf
>
>_____
>>Thanks Gregory,
>>
>>Works perfectly even with relative paths!!!
>>
>>+++ Rick ---
>>
>>
>>>>VFP has the unfortunate problem that all path related functions return filenames and paths in UPPER case. For example, GetFile() returns upper case as does FULLPATH() and even the varoius SYS() functions related to directory values return upper case.
>>>>
>>>>Does anybody know of an API call that you can pass a file or directory path to that will return the fully qualified long filename in proper case back? At least that way I can retrieve the filename and then later convert it into the proper case.
>>>>
>>>>I've played around GetLongPathName and GetFullPathName but neither of these seem to work and simply return the same case as what was passed in. THey basically confirm the file name and that the file exists.
>>>
>>>
>>>Rick,
>>>
>>>I am happy with following piece of code. I haven't found any better. It works its way up using FindFirstFile()
>>>
>>>
>>>
>>>?DiskFileName('C:\Whatever\Folder\or\Filename\)
>>>*---------------------------------------------------------------------------
>>>#Define MAX_PATH 260
>>>function	DiskFilename(FileName)
>>>	
>>>	declare Integer FindFirstFile in win32api string @, String @
>>>	declare Integer FindNextFile in win32api Integer, String @
>>>	declare Integer FindClose in win32api Integer
>>>	
>>>	do case
>>>	case ( right(FileName,1) == '\' )
>>>		return addbs(DiskFilename(left(FileName, len(Filename)-1)))
>>>	
>>>	case empty(FileName)
>>>		return ''
>>>	
>>>	case ( len(FileName) == 2 ) and ( right(FileName,1) == ':' )
>>>			return Filename	&& win2k gives curdir() for C:
>>>	endcase
>>>	
>>>	local Handle, FindFileData, xxx
>>>	FindFileData = space(4+8+8+8+4+4+4+4+MAX_PATH+14)
>>>	Handle = FindFirstFile(@FileName, @FindFileData)
>>>	
>>>	if( Handle < 0 )
>>>		if( !empty(JustFname(Filename)) )
>>>			xxx = JustFname(Filename)
>>>		else
>>>			xxx = FileName
>>>		endif
>>>	else
>>>		=FindClose(Handle)
>>>		xxx = substr(FindFileData, 45, MAX_PATH)
>>>		xxx = left(xxx, at(chr(0), xxx)-1)
>>>	endif
>>>	
>>>
>>>	do case
>>>	case empty(justpath(FileName))
>>>		return xxx
>>>	case ( justpath(FileName) == '\' ) and (left(FileName,2) == '\\')	&& unc
>>>		return '\\' + xxx
>>>	otherwise
>>>		return addbs(DiskFilename(JustPath(FileName))) + xxx
>>>	endcase
>>>		
>>>endfunc
>>>*--------------------------------------------------------------------------
>>>
+++ Rick ---

West Wind Technologies
Maui, Hawaii

west-wind.com/
West Wind Message Board
Rick's Web Log
Markdown Monster
---
Making waves on the Web

Where do you want to surf today?
Previous
Reply
Map
View

Click here to load this message in the networking platform