如何在system()中表示当前用户路径

时间:2012-12-13 05:52:24

标签: objective-c macos shell xcode4.5

我需要将文件复制到当前工作用户目录。

我确实喜欢这个

NSString *filepath = @"~/Desktop";
NSString *filename = @"newFile";

int status=system([[NSString stringWithFormat:@"touch %@/%@", filePath, filename]UTF8String]);

但这不是在桌面上创建文件。 有人可以告诉我“〜”的替代方案来获得当前的工作用户。

4 个答案:

答案 0 :(得分:0)

如何使用getenv("HOME")

答案 1 :(得分:0)

NSString *filepath = [@"~/Desktop" stringByExpandingTildeInPath];
NSString *filename = @"newFile";

int status=system([[NSString stringWithFormat:@"touch %@/%@", filepath, filename]UTF8String]);

答案 2 :(得分:0)

~字符在文件系统上下文中没有意义,它在shell上下文中有意义,并由$HOME替换为 Tilde Expansion 的一部分。来自bash的人:

  

Tilde扩张

     

如果一个单词以不带引号的波浪号字符(“〜”)开头,则全部为   第一个未加引号的斜杠之前的字符(或所有字符,如果          没有不带引号的斜杠)被认为是波浪号前缀。如果没有          引用了波浪号前缀中的字符,中的字符          波浪号后面的波浪号前缀被视为可能的登录名。          如果此登录名是空字符串,则将波形符替换为          shell参数HOME的值。如果HOME未设置,则主页指示          代替执行shell的用户的tory。其他-          明智的是,tilde-prefix被替换为相关的主目录          使用指定的登录名。

因此,正如Dolda2000建议的那样,一个解决方案是使用$HOME而不是~,但当用户不是root用户(root用户身份)时,它不适用于~root在这种情况下的例子)。

更通用的解决方案是在system调用中调用shell。我不知道Objective-C,但它接缝,用bash,它看起来像:

int status=system([[NSString stringWithFormat:@"bash -c 'touch %@/%@'", filePath, filename]UTF8String])

答案 3 :(得分:0)

让您机器中的所有用户

 for USER_DIR in $(ls /Users); 
    do { 
    *<write code here to implement something with each user>*;
    } 
    done;

这是一个终端命令。 与目标c中的 system()一起使用。