How to detect current executable file name?

eGust egustc at gmail.com
Sun Feb 17 23:50:43 PST 2013


On Monday, 18 February 2013 at 07:07:42 UTC, Jonathan M Davis 
wrote:
> On Monday, February 18, 2013 07:59:08 SaltySugar wrote:
>> On Monday, 18 February 2013 at 03:28:59 UTC, eGust wrote:
>> > I need to locate the directory of current executable file, 
>> > but
>> > I can't find how to do that in Phobos. I tried
>> > core.runtime.Runtime.args[0], but failed. Is there a standard
>> > method of Phobos to do that? I only know the way of Windows
>> > (GetModuleFileName), but I think as a common task there 
>> > should
>> > be a platform-independent way to get it in the standard 
>> > library.
>> 
>> import std.stdio;
>> 
>> void main (string[] args)
>> {
>>      writeln(args[0]);
>> }
>
> That'll tell you the name of the executable, but the path is 
> relative to the
> directory that the program was run from. However, if you 
> combine that with
> std.path.absolutePath, you should be able to get the absolute 
> path to the
> executable, and from that you should be able to get the 
> directory with
> std.path.dirName.
>
> Alternatively, if you want to know the current working 
> directory, then use
> std.file.getcwd.
>
> - Jonathan M Davis

This way won't work. main's args[0] (which also is 
Runtime.args[0]) only tells you the executed command line.
Suppose on Windows there is an exe file(foo.EXE) in a 
dir(C:\bar), which is in %PATH%. Call "foo" anywhere(CWD==D:\), 
then C:\bar\foo.EXE will be executed, and its args[0] will be 
just "foo". Because absolutePath(args[0]) uses getcwd by default, 
so "D:\foo"(getcwd~args[0]) will be incorrectly got.


More information about the Digitalmars-d-learn mailing list