2

このコードは、プロセスの標準出力を取得するために使用されます

    NSTask       * task;
    NSPipe       * pipe;
    NSFileHandle * fileHandle;

    task       = [ [ NSTask alloc ] init ];
    pipe       = [ NSPipe pipe ];
    fileHandle = [ pipe fileHandleForReading ];

    [ task setLaunchPath: @"/usr/bin/lspci" ];
    [ task setArguments:[NSArray arrayWithObject:@"-nn"]];
    [ task setStandardOutput: pipe ];
    [ task setStandardError: pipe ];
    [ task launch ];
    [ task waitUntilExit]; 
    [ task release];

    NSData *outputData = [[pipe fileHandleForReading] readDataToEndOfFile];

    NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease];

/usr/bin/lspci一部のシステムには存在しないため、この致命的なエラーが発生します

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '起動パスにアクセスできません'

存在することを事前に確認し、lspci存在しない場合はユーザーにエラーメッセージを表示する方法は?

4

2 に答える 2

5

ファイルが存在し、実行可能かどうかを確認するには:

BOOL exists = [[NSFileManager defaultManager] isExecutableFileAtPath:[task launchPath]];

例外が発生する理由は、ファイルの欠落だけではありません。常に@try-@catchブロックを使用する必要があります。

于 2011-08-13T11:00:38.640 に答える
1
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:@"/usr/bin/lspci"];
if (!exists) {
   // handle error...
}
于 2011-08-13T10:59:00.590 に答える