0

Mac (iOS ではない) アプリケーションを持っています。ユーザーがNSOpenPanelでフォルダーを選択した後、シェル コマンド 'find' を実行したいと考えています。以下は私が持っているものです。

NSString *path = [url path];
NSString *folderName = [path lastPathComponent];

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/find"];
NSMutableString *command = [[NSMutableString alloc] initWithString:path];
[command appendString:@" -name '._*' -type f "];
NSArray* args = [NSArray arrayWithObjects:@"commit",command,nil];
[task setArguments:args];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task launch];
NSFileHandle *file;
file = [pipe fileHandleForReading];
NSData *data;
data = [file readDataToEndOfFile];
NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"%@",output);

Objective-C で開発された Mac アプリケーションでシェル コマンドを実行するのは初めてです。私は正しい軌道に乗っていると思います。とにかく、フォルダーを選択すると、次のデバッガー出力メッセージが表示されます。

  • find: commit: そのようなファイルやディレクトリはありません
  • find: find: /Volumes/SDHC 16 GB/More -name '._*' -type f : No such file or directory

シェルコマンドはこの種のファイルパスを読み取ることができないと思います. それをシェルパスまたはそれが理解できるものに変換する必要がありますか? もしそうなら、どのように?

アドバイスありがとうございます。

4

1 に答える 1

1

わかった。

NSString *path = [url path];
NSString *folderName = [path lastPathComponent];

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/find"];
NSMutableString *command = [[NSMutableString alloc] initWithString:@""];
[command appendString:@" -name '._*' -type f"];
NSArray* args = [NSArray arrayWithObjects:path,command,nil];
[task setArguments:args];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task launch];
NSFileHandle *file;
file = [pipe fileHandleForReading];
NSData *data;
data = [file readDataToEndOfFile];
NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"%@",output);
于 2013-05-15T03:36:25.823 に答える