2013-01-08 9 views
5

Próbuję użyć biblioteki (cfitsio) w aplikacji na iOS, która w dużym stopniu zależy od użycia wskaźnika pliku w celu otwarcia i utrzymania dostępu do pliku danych. Z powodzeniem zbudowałem aplikację Objective-C Mac, która robi to, co muszę zrobić w systemie iOS. Cocoa touch ma metody ładowania pliku do NSData, ale nie widzę, aby uzyskać bezpośrednio wskaźnik pliku, prawdopodobnie ze względu na surowszą prywatność w systemie plików na iOS. Czy istnieje sposób, aby uzyskać bezpośrednio wskaźnik pliku lub użyć NSData do utworzenia wskaźnika pliku do tymczasowego użycia z biblioteką?Używanie wskaźników plików w Objective-C dla iOS

Funkcja c, której użyłbym do otwarcia pliku, została zadeklarowana poniżej. Wskaźnik pliku jest nadal używany w wielu innych funkcjach bibliotecznych.

int ffopen(fitsfile **fptr,  /* O - FITS file pointer     */ 
      const char *name,  /* I - full name of file to open   */ 
      int mode,    /* I - 0 = open readonly; 1 = read/write */ 
      int *status);   /* IO - error status      */ 

Odpowiedz

5

Spróbuj użyć NSFileManager który creats NSFileHandle podczas otwierania pliku. Uchwyt ten posiada getter dla fileDescriptor:

Returns the file descriptor associated with the receiver. 
- (int)fileDescriptor 
Return Value 
The POSIX file descriptor associated with the receiver. 

patrz także NSFileHandle

+0

Powodzenia z tym. – gnasher729

2

Wydaje się to biblioteka deklaruje typ "fitsfile" i wykorzystuje wskaźniki "fitsfile *".

Funkcja ffopen wygląda bardzo podobnie do , otwiera się plik i tworzy plik pasujący *, który zwraca za pomocą pliku dopasowanego **. Więc nie musisz się w ogóle martwić o te pliki, biblioteka to robi.

Więc chcesz chyba napisać coś podobnego

NSString* path = <Objective-C code to get a path>; 
BOOL readOnly = <YES or NO, your choice> 
fitsfile* fptr = NULL; 
int fstatus = 0; 
int fresult = ffopen (&fptr, path.UTF8String, (readonly ? 0 : 1), &fstatus); 

Ponieważ ta biblioteka chce dane zapisane w pliku, który ma ścieżki, jedynym sposobem, aby to zrobić, aby zapisać dane w pliku i przekazać ścieżkę do tego pliku, aby go otworzyć.

+1

Ogólnie, użyj '-fileSystemRepresentation' (nie" -UTF8String "), aby uzyskać ciąg C, który zostanie przekazany do API C oczekującego na ścieżkę pliku. –

Powiązane problemy