2012-01-04 41 views
3

由於某些原因,我評估選擇是通過文件在我的iOS應用程序和我的C++ - Lib(由iOS-App使用)之間交換數據。數據交換Objective-C與基於C++的文件

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

有點快速和骯髒的,但我可以看到的是,有沒有文件已在設備上創建雖然lib中都可以使用。

我的問題: 從包含的C++ lib中訪問設備文件系統是否有任何限制?我必須使用任何特殊的目錄進行文件交換嗎?

回答

4

您的應用程序是「沙盒」,這意味着它不能訪問臨時文檔和文檔空間以外的文件。 "./test.txt"位於「沙箱區域」之外,因此iOS正確無法讓您訪問該文件。概括地說,如果你想轉讓使用臨時文件數據,你需要這樣的一個文件名:

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

This document提供了關於這個問題的進一步閱讀。