0

現在作業中のユーザー ディレクトリにファイルをコピーする必要があります。

私はこれが好きでした

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

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

しかし、これはデスクトップ上にファイルを作成していません。現在作業中のユーザーを取得するための「〜」の代替方法を教えてください。

4

4 に答える 4

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

int status=system([[NSString stringWithFormat:@"touch %@/%@", filepath, filename]UTF8String]);
于 2012-12-13T06:28:51.157 に答える
0

マシン内のすべてのユーザーを取得するには

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

これは端末コマンドです。目的 c の system() で動作します

于 2012-12-26T06:53:19.930 に答える
0

を使用してはgetenv("HOME")どうですか?

于 2012-12-13T05:56:17.243 に答える
0

この~文字は、ファイルシステムのコンテキストでは意味がありません。シェルのコンテキストでは意味があり、 Tilde Expansion$HOMEの一部として置き換えられます。バッシュマン より:

チルダ展開

単語が引用符で囲まれていないチルダ文字 (`~') で始まる場合、最初の引用符で囲まれていないスラッシュの前にあるすべての文字 (または、引用符で囲まれていないスラッシュがない場合はすべての文字) がチルダ接頭辞と見なされます。チルダ接頭辞の文字が引用符で囲まれていない場合、チルダに続くチルド接頭辞の文字は、可能なログイン名として扱われます。このログイン名がヌル文字列の場合、チルダはシェル パラメータ HOME の値に置き換えられます。HOME が設定されていない場合、シェルを実行しているユーザーのホームディレクトリが代わりに使用されます。それ以外の場合、チルダ接頭辞は、指定されたログイン名に関連付けられたホームディレクトリに置き換えられます。

そのため、Dolda2000 が提案したように、$HOME代わりに を使用するという 1 つの解決策がありますが、ユーザーが root でない場合 (この場合の例として root) は機能~しません。~root

より一般的な解決策は、呼び出しでシェルをsystem呼び出すことです。Objective-C はわかりませんが、bash を使用すると、次のようになります。

int status=system([[NSString stringWithFormat:@"bash -c 'touch %@/%@'", filePath, filename]UTF8String])
于 2012-12-13T09:19:04.563 に答える