由于某些原因,我评估了我的iOS-App和我的C ++-Lib(由iOS-App使用)之间按文件交换数据的选项。
C ++(在本地计算机上运行正常):
void LibFacadeTest::testFileAccess()
{
this->log->info("start testFileAccess");
char filename[] = "./test.txt";
std::string result;
LibFacade *e = new LibFacade();
try
{
result = e->testFileAccess(filename);
}
catch(...)
{
this->log->error("error");
}
this->log->info("Result:" + result);
delete(e);
}
为ARM重新编译并在设备上运行我可以看到filename参数正确传递(通过日志),但没有返回任何内容。
这是Objective-C代码:
LibFacade *tlb = new LibFacade();
char *testName = "blub.txt";
std::string str = tlb->testFileAccess(testName);
// Check, if file exists
NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: @"blub.txt" ] == YES)
NSLog (@"File exists");
else
NSLog (@"File not found");
NSError *error = nil;
NSString *myString = [NSString stringWithContentsOfFile:@"blub.txt" encoding:NSUTF8StringEncoding error:&error];
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:myString
delegate:nil cancelButtonTitle:nil destructiveButtonTitle:myString otherButtonTitles:nil];
[actionSheet showInView:self.view];
有点快速和肮脏,但我可以看到,虽然可以使用lib,但设备上没有创建文件。
我的问题: 从包含的C ++库访问设备文件系统有什么限制吗?我是否必须使用任何特殊目录进行文件交换?
答案 0 :(得分:4)
您的应用程序是“沙盒”,这意味着它无法访问其临时文档空间和文档文件空间之外的文件。 "./test.txt"
位于“沙箱区域”之外,因此iOS正确无法访问该文件。简而言之,如果您想使用临时文件传输数据,那么您需要这样的文件名:
NSString *tempDirectoryName =
[NSTemporaryDirectory() stringByAppendingPathComponent:@"test.txt"];
This document提供了有关该主题的进一步阅读。