Expanding Tilde-based paths
Q: How do I expand a tilde-based path to its full path value?
A: How do I expand a tilde-based path to its full path value?
Some situations may arise where you would like to expand a tilde-based relevant path into a resolved, absolute path. For example "~/" might resolve to "/Users/johndoe". Here are examples on how to accomplish this task under each development environment (Objective-C, POSIX and Core Foundation).
Listing 1 Objective-C (result is autoreleased)
NSString *result = [@"~/Desktop" stringByExpandingTildeInPath]; |
Listing 2 POSIX (caller responsible for freeing result)
#include <glob.h> char* CreatePathByExpandingTildePath(char* path) { glob_t globbuf; char **v; char *expandedPath = NULL, *result = NULL; assert(path != NULL); if (glob(path, GLOB_TILDE, NULL, &globbuf) == 0) //success { v = globbuf.gl_pathv; //list of matched pathnames expandedPath = v[0]; //number of matched pathnames, gl_pathc == 1 result = (char*)calloc(1, strlen(expandedPath) + 1); //the extra char is for the null-termination if(result) strncpy(result, expandedPath, strlen(expandedPath) + 1); //copy the null-termination as well globfree(&globbuf); } return result; } |
Listing 3 Core Foundation (caller responsible for releasing result)
#include <glob.h> // This is the POSIX version in listing 2. char* CreatePathByExpandingTildePath(char* path); CFStringRef CreateCFStringByExpandingTildePath(CFStringRef path) { char pcPath[PATH_MAX]; char *pcResult = NULL; CFStringRef result = NULL; if (CFStringGetFileSystemRepresentation(path, pcPath, PATH_MAX)) //CFString to CString { pcResult = CreatePathByExpandingTildePath(pcPath); //call the POSIX version if (pcResult) { result = CFStringCreateWithCString(NULL, pcResult, kCFStringEncodingUTF8); //CString to CFString free(pcResult); //free the memory allocated in CreatePathByExpandingTildePath() } } return result; } |
Document Revision History
Date | Notes |
---|---|
2008-09-08 | Simplified POSIX and CF versions using the embedded glob() function. |
2007-09-24 | New document that demonstrates how to resolve tilde-based relevant paths. |
Copyright © 2008 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2008-09-08