Расширение Основанных на тильде путей
Q: Как я разворачиваю основанный на тильде путь к его значению полного пути?
A: Как я разворачиваю основанный на тильде путь к его значению полного пути?
Некоторые ситуации могут возникнуть, где требуется развернуть основанный на тильде соответствующий тракт в разрешенный, абсолютный путь. Например, «~ /» мог бы решить к «/users/johndoe». Вот примеры того, как выполнить эту задачу под каждой средой разработки (Objective C, POSIX и Базовая Основа).
Objective C перечисления 1 (результат автовыпущен),
NSString *result = [@"~/Desktop" stringByExpandingTildeInPath]; |
Перечисление 2 POSIX (вызывающая сторона, ответственная за освобождение результата)
#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;
} |
Основа Ядра перечисления 3 (вызывающая сторона, ответственная за выпуск результата)
#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;
} |
История версии документа
| Дата | Примечания |
|---|---|
| 08.09.2008 | Упрощенный POSIX и версии CF с помощью встроенного шарика () функция. |
| 24.09.2007 | Новый документ, демонстрирующий, как разрешить основанные на тильде соответствующие тракты. |