digitalmars.D.learn - Absolute path
- Reiner Pope (17/17) Aug 19 2006 Hi there,
- Jarrett Billingsley (9/20) Aug 19 2006 I can't find any in phobos. I usually end up doing what you do..
- Regan Heath (26/41) Aug 22 2006 There are some C functions _fullpath and _wfullpath (unicode) which can ...
Hi there,
I can't find any function which will convert a file path from relative
something similar.
Is there one?
Do you think this is a good enough solution?
char[] toabs(char[] filepath)
out (c)
{
assert (isabs(c));
}
body
{
return (join(getcwd(), filepath));
}
Cheers,
Reiner
Aug 19 2006
"Reiner Pope" <reiner.pope REMOVE.THIS.gmail.com> wrote in message news:ec72hr$hd7$1 digitaldaemon.com...Is there one?I can't find any in phobos. I usually end up doing what you do..Do you think this is a good enough solution? char[] toabs(char[] filepath) out (c) { assert (isabs(c)); } body { return (join(getcwd(), filepath)); }That's almost exactly what I do, but I check to see that it isn't absolute already: if(isabs(filepath)) return filepath; else return join(getcwd(), filepath);
Aug 19 2006
On Sat, 19 Aug 2006 23:06:42 +1000, Reiner Pope
<reiner.pope REMOVE.THIS.gmail.com> wrote:
Hi there,
I can't find any function which will convert a file path from relative
something similar.
Is there one?
Do you think this is a good enough solution?
char[] toabs(char[] filepath)
out (c)
{
assert (isabs(c));
}
body
{
return (join(getcwd(), filepath));
}
There are some C functions _fullpath and _wfullpath (unicode) which can
take a relative path and give the full path. I do not think they are ANSI
functions however they do appear to exist in the DMC libraries (and thus
you can use them in D).
eg.
import std.stdio; //writefln
import std.string; //toStringz
import std.c.string; //strlen
extern(C) char *_fullpath(char *buf,char *path,size_t buflen);
void main()
{
char[] abs = new char[100]; //allocate space
char[] rel = "a\\b\\c";
_fullpath(abs.ptr,toStringz(rel),abs.length);
abs.length = strlen(abs.ptr); //correct array length
writefln(abs);
}
This should output <cwd>\a\b\c where <cwd> is the path in which you run it.
Also of note are these functions:
_makepath, _wmakepath
_splitpath, _wsplitpath
:)
Regan
Aug 22 2006









"Jarrett Billingsley" <kb3ctd2 yahoo.com> 