6

データファイルへのアクセスを開いて維持するためにファイルポインタを使用することに大きく依存しているiOSアプリケーションでライブラリ(cfitsio)を使用しようとしています。iOSで必要なことを実行するObjective-CMacアプリを正常に構築しました。Cocoa touchにはNSDataにファイルをロードするメソッドがありますが、おそらくiOSのファイルシステムのプライバシーが厳しくなっているため、ファイルポインターを直接取得する方法がわかりません。ファイルポインタを直接取得する方法、またはNSDataを使用してライブラリで一時的に使用するファイルポインタを作成する方法はありますか?

ファイルを開くために使用するc関数を以下に宣言します。ファイルポインタは、他の多くのライブラリ関数で引き続き使用されます。

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                       */
4

2 に答える 2

5

ファイルを開くときにNSFileManagerを作成するを使用してみてください。このハンドルには、 :NSFileHandleのゲッターがあり ます。fileDescriptor

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

NSFileHandleも参照してください

于 2013-01-08T21:33:53.597 に答える
2

このライブラリはタイプ「fitsfile」を宣言し、ポインタ「fitsfile*」を使用しているようです。

関数ffopenは、ファイルを開いてfitsfile *を作成し、fitsfile**を使用して返すのと非常によく似ています。したがって、これらのファイルについてまったく心配する必要はありません。ライブラリがそれを行います。

だからあなたはおそらく次のようなものを書くでしょう

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

このライブラリはパスを持つファイルにデータを保存する必要があるため、これを行う唯一の方法は、データをファイルに保存し、そのファイルへのパスをffopenに渡すことです。

于 2014-07-05T11:11:31.990 に答える