2015-10-25 31 views
0

我想通過NSTask運行這個命令:mv /User/xxx.deb/User/Docs將deb文件移動到/ User/Docs。然而,這個deb文件可以有許多名字:blah.deb,blah3.deb,hgfdo.deb,6745sdjiz.deb,...如何使用NSTask和NSPredicate?

這裏是我當前的代碼:

#import <Foundation/NSTask.h> 

NSString *myString = @"deb"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString]; 
NSTask *task = [[[NSTask alloc] init] autorelease]; 
[task setLaunchPath:@"/bin/mv"]; 
[task setArguments:[NSArray arrayWithObjects:[NSString stringWithFormat:@"/User/%@", predicate], @"/User/Tweak/", nil]]; 
[task launch]; 

這沒有按」工作。如果沒有NSPredicate,它的工作原理:

[task setArguments:[NSArray arrayWithObjects:@"/User/com.deb", @"/User/Tweak/", nil]]; 

但我需要使用NSPredicate(或任何其他方法)

你有一個想法?

+0

'NSTask'的'arguments'屬性是'NSString'的'NSArray',而不是'NSPredicate'。也許'/用戶/ * deb'?像在終端/ Bash中一樣。 – Larme

+0

剛剛嘗試過,它不起作用 – Ziph0n

回答

1

應該使用NSPredicate來評估Objective-C對象(NSArrays,NSStrings等)。 我會使用類似:

[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSURL URLWithString:@"/User/"] includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil] 

得到一個陣列中的所有文件。

然後使用NSArray的filteredArrayUsingPredicate:與NSPredicate(有點不同於你的,雖然像SELF.pathExtension == %@)。

你最終會得到一個與你的謂詞相匹配的NSURL數組。您只需將它們轉換爲路徑並將您的/Tweak/文件夾添加到陣列。您將其用作任務的參數。

當然,如果你只是想移動一些文件,你不需要使用NSTask。 NSFileManager具有將NSURL數組從一個目錄移動到另一個目錄的方法。