所以在我的应用程序中我有一个表视图。如果一个文件是一个deb文件,它会要求安装,按安装,它会把我带到一个显示安装的视图控制器,类似于iFile和Cydia(不像输出lol那样迷人)。如果空间是文件名称Deb无法安装
在这方面一切都很好。它会安装。然而。如果文件的名称中有空格,即random File.deb
,则会失败。我注意到iFile已经想通了,试着联系他们看看他们是否可以启发我,但没有回应。
我会怎样逃离这个空间?或让它看起来像dpkg不在乎它在那里?
这就是我如何调用并执行安装。
MyDownloadsViewController * vc = [[MyDownloadsViewController alloc] init];
vc.fileName = debName;
// Get documents folder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [paths objectAtIndex:0];
path = [[@"~/Documents/myFolder" stringByExpandingTildeInPath] retain];
NSString *debPath = [path stringByAppendingPathComponent:vc.fileName];
//NSTask
NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath: myLaunchPath];
[task setArguments: [NSArray arrayWithObjects:@"/usr/bin/dpkg", @"-i", debPath, @"2>/tmp/dpkg.log" ,nil]];
[task setStandardOutput: pipe];
[task launch];
我已经尝试使用:
[filename stringByReplacingOccurrencesOfString:@" " withString:@""]
同时在下载
发送的文件和输出视图控制器接收它。它要么失败,要么应用程序崩溃。
我也试过:
if ([fileName rangeOfString:@" "].location != NSNotFound) {
appendedFile = [path stringByReplacingOccurrencesOfString:@" " withString:@""];
}
以确定该文件有一个空间,如果不继续像正常。这有一些不想要的结果,并且它会安装表视图中的最后一个deb。
使用2个NSTask会更好吗? 1解包和第二个配置?我试过了,但它不会进入第二个任务,或者它仍然会看到第一个正在运行并锁定dpkg。
任何洞察力或知识将不胜感激。
您不能使用'2>/tmp/dpkg.log'作为NSTask的参数,因为该参数应该由shell解释,而不是'dpkg'解释。 NSTask不会像'''或'>'那样自动解释类似shell的语法! – Michael
dpkg.log是打开我的表视图时创建的日志文件。一旦安装了deb,它会读取打印到该日志文件的输出。这可能不是一种“正确”的方式,但它适用于我正在做的事情。 – ChrisOSX