2013-02-06 32 views
0

下面複製代碼。我正在使用文檔目錄,因爲我知道你可以在應用程序沙箱之外進行書寫。 我還比較了我用來確定由NSFileManager創建的路徑的字符串,它們是相同的。你們都在想什麼?從iOS開啓獲取-1,爲什麼?

- (NSString *)documentsDirectory 
{ 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

    return [paths objectAtIndex:0]; 
} 

- (void) whateverFunction{ 
    NSString *memfileName = @"memmapfile.map"; 

    NSString *filePath = [[self documentsDirectory] stringByAppendingPathComponent:memfileName]; 

    NSLog(@"Here is the filePath: %@", filePath); 

    NSLog(@"Other  version: %s", [[NSFileManager defaultManager] fileSystemRepresentationWithPath:filePath]); 
    int memFD = open([filePath cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR); 
    NSLog(@"I am getting -1 for memFD: %d", memFD); 
} 
+1

您可以粘貼您的'open()'方法嗎?此外,你爲什麼不使用Obj-C方法的任何原因? – MishieMoo

+1

首先猜測你的文件路徑是無效的,或者你沒有被授權訪問那裏。 –

+0

開放方法是POSIX的方法。我正在使用它,因爲我試圖做一些mmap。 要熱舔,我檢查了errno,並得到2的映射到字符串「沒有這樣的過程」的值。你怎麼看? – user1660675

回答

1

我猜你的文件還不存在,所以當然你不能打開它。您應該將O_CREAT添加到打開的標誌中,以便在它不存在時創建它:

int memFD = open([filePath cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR|O_CREAT); 
+0

是的,這是問題所在。愚蠢的疏忽。 – user1660675

相關問題