gpt4 book ai didi

iphone - 基于 Objective-C 与 C++ 文件的数据交换

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:37 26 4
gpt4 key购买 nike

出于某些原因,我评估了通过文件在我的 iOS 应用程序和我的 C++-Lib(由 iOS 应用程序使用)之间交换数据的选项。

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 重新编译并在设备上运行我可以看到文件名参数已正确传递(通过日志),但没有返回任何内容。

这是 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];

有点快和脏,但我可以看到,尽管可以使用库,但设备上没有创建文件。

我的问题:从包含的 C++ 库访问设备文件系统是否有任何限制?我是否必须使用任何特殊目录进行文件交换?

最佳答案

您的应用程序是“沙盒”的,这意味着它无法访问其临时文件和文档文件空间之外的文件。 "./test.txt" 位于“沙盒区域”之外,因此 iOS 正确地不允许您访问该文件。简而言之,如果您想使用临时文件传输数据,您需要这样的文件名:

NSString *tempDirectoryName =
[NSTemporaryDirectory() stringByAppendingPathComponent:@"test.txt"];

This document提供有关该主题的进一步阅读。

关于iphone - 基于 Objective-C 与 C++ 文件的数据交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8727958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com