| |
| Posted by Regan Heath in reply to Reiner Pope | PermalinkReply |
|
Regan Heath
Posted in reply to Reiner Pope
| 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 to absolute. C# and Java both have one: Path.GetAbsolutePath or 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
|