[fpc-pascal] Too tired? Forcedirectories does not seem to work
Tomas Hajny
XHajT03 at hajny.biz
Tue Feb 7 18:09:32 CET 2012
On Tue, February 7, 2012 17:43, michael.vancanneyt at wisa.be wrote:
> On Tue, 7 Feb 2012, Jürgen Hestermann wrote:
>> Reinier Olislagers schrieb:
>>> And while ~ is a relative path,
>>
>> But ~ is not the only placeholder that will be expanded. Relative paths
>> would
>> become absolute paths and environment variables will be replaced by
>> their
>> values too. And I think it's not restricted to Linus/Unix, it happens on
>> Windows too. So if at all I would list all these possible expansions:
>>
>> "ExpandFileName expands the filename to an absolute filename. Replaced
>> would
>> be
>> -) placeholders (like ~)
>> -) environment variables (like HOME)
>> -) relative path would completed to absolute paths
>> etc.
>
> I will look into improving the documentation. The implementation has been
> improved over the years.
Until Michael updates the documentation, some comments from me:
1) "~" is the only placeholder which is expanded by ExpandFileName and
this only on Unix platforms (in particular, those containing {$DEFINE
FPC_FEXPAND_TILDE} in the respective parts of implementations of units
sysutils (and dos for FExpand).
2) No environment variables are expanded by ExpandFileName; the "~"
placeholder is directly replaced by content of environment variable HOME
as appropriate, but if you include $HOME (or %HOME% under Dos / OS/2 /
Windows), it will stay in the expanded value literally. Changing this
would result in an incompatibility to Delphi and TP/BP. Should an
environment variable expansion feature be required, I'd do it by adding a
new function or an overloaded variant to the RTL (we could still share the
same implementation code, but probably add a different compiler define).
3) The ExpandFileName / FExpand implementation is shared across all
supported targets, but the set of features used for a particular target is
determined by conditional defines within the particular RTL version - see
comments at the end of rtl/inc/fexpand.inc for details. This means that
the exact behaviour tries to accomodate standard filesystem API
conventions and features relevant for the different targets.
Tomas
More information about the fpc-pascal
mailing list