Of course your way is also proper, by the official documentation
https://www.freepascal.org/docs-html/rtl/system/paramstr.html
This means even on Unix, paramstr(0) returns the full path to the program executable
"...is the path
and file name with which the program was started". You mean ParamStr(0) + 'f1.txt" = ".../project1.exe.f1.txt" are located in the same folder?