Possible bug in std.path?
Hugo via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jun 19 05:23:08 PDT 2016
On Friday, 20 May 2016 at 17:41:22 UTC, Adam D. Ruppe wrote:
> [...]
>
> Use GetCommandLine to fetch the original thing the user typed,
> then process it yourself.
>
> [...]
Then why doesn't the following code produce the expected output?
import std.stdio, std.file, std.path;
version (Windows) {
import core.sys.windows.windows, std.conv;
pragma(lib, "shell32.lib");
}
enum EXIT_SUCCESS = 0;
enum EXIT_FAILURE = 1;
int main(string[] originalargs) {
string[] args;
version (Windows) {
SetConsoleOutputCP(65001);
int wargc;
auto wargs = CommandLineToArgvW(GetCommandLineW(), &wargc);
if (wargs) {
for(uint i; i < wargc; i++) args ~=
buildNormalizedPath(text(wargs[i]));
} else {
writeln("Error getting command line arguments.");
return EXIT_FAILURE;
}
} else args = originalargs;
foreach(uint i, string a; args) writefln("Argument %d: '%s'",
i, a);
return EXIT_SUCCESS;
}
Test from Windows:
mytestapp dir1 dir2 "..\my parent dir\"
(all valid arguments)
Output:
Argument 0: 'mytestapp'
Argument 1: 'dir1'
Argument 2: 'dir2'
Argument 3: '..\my parent dir"'
Notice: I had to use std.conv from master branch because
otherwise text() wouldn't dereference wargs (of type wchar**).
PS. Please forgive me the delay.
More information about the Digitalmars-d
mailing list