我需要将文件复制到当前工作用户目录。
我确实喜欢这个
NSString *filepath = @"~/Desktop";
NSString *filename = @"newFile";
int status=system([[NSString stringWithFormat:@"touch %@/%@", filePath, filename]UTF8String]);
但这不是在桌面上创建文件。 有人可以告诉我“〜”的替代方案来获得当前的工作用户。
答案 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()一起使用。