On Tue, 29 Oct 2019, Bo Berglund via lazarus wrote:
I am writing a console application intended to be portable between
Windows and Linux and it uses files on the file system for
configuration and also for processing data.
Since the path delimiter is different on Unix and Windows I believe I
have to handle this in my code, but how?
I could create all paths inside the application using Windows
delimiters and then upon usage send them to a "platform filter" like
FixPlatformPath() below, which returns the string with the proper
delimiters for the platform.
Or else I have to check wherever the paths are dealt with and put
conditionals inside the code in many places.
Either way it feels a bit convoluted.
Is there a better way?
function FixPlatformPath(PathIn: string): string;
begin
{$ifdef UNIX}
Result:= StringReplace(PathIn, '\', PathDelim, [rfReplaceAll]);
{$else}
Result:= StringReplace(PathIn, '/', PathDelim, [rfReplaceAll]);
{$endif}
end;
This would apply to all functions where files are handled such as
reading config data, creating data files or reading data files etc...
1. Don't hardcode '/' or '\', use the PathDelim constant instead.
You will not need any ifdefs.
2. FPC does not care whether you use '\' or '/', and windows normally will
accept '/' as well.
3. your "fixplatformpath' exists in FPC, in 2 forms:
https://www.freepascal.org/docs-html/current/rtl/sysutils/dodirseparators.html
https://www.freepascal.org/docs-html/current/rtl/sysutils/setdirseparators.html
There are many routines that handle all this transparently:
https://www.freepascal.org/docs-html/current/rtl/sysutils/filenameroutines.html
Michael.
--
_______________________________________________
lazarus mailing list
[email protected]
https://lists.lazarus-ide.org/listinfo/lazarus