2

iPhoneアプリでfwrite(C関数)を使ってみました。

カスタムの理由で、writeToFileではなくfwriteC関数を使用したいと思います。

私はdidFinishLaunchingWithOptions関数でこのコードを書きました:

  FILE *p = NULL;
  NSString *file= [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Hello.txt"];
  char buffer[80] = "Hello World";
  p = fopen([file UTF8string], "w");
  if (p!=NULL) {
      fwrite(buffer, strlen(buffer), 1, p);
      fclose(p);
  }

しかし、fwrite関数でエラーEXC_BAD_ACCESSが発生します。

何か助けはありますか?

4

1 に答える 1

3

あなたの問題はあなたが間違った場所に書いていることです。NSStringクラスで提供される関数を使用する方がはるかに簡単です。これにより、ファイルへの書き込みが可能になります。アプリのサンドボックスの/Documentsフォルダーに移動します(アプリのサンドボックスは、ファイルを自由に書き込むことができる唯一の場所です)

NSString *stringToWrite =  @"TESTING";
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/filename.txt"];
[stringToWrite writeToFile:path atomically:YES encoding NSUTF8StringEncoding];

これが最も簡単なアプローチだと思います。fwriteでも同じことができます。次のように、cstringUsingEncodingを使用してパスをcstringに変換する必要があります。

NSString *stringToWrite =  @"TESTING";
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/filename.txt"];
char *pathc =  [path cStringUsingEncoding:NSUTF8StringEncoding];
char *stringToWritec = [stringToWrite cStringUsingEncoding:NSUTF8StringEncoding];

注:アップルがファイル名にUTF8エンコーディングを使用していることはほぼ間違いありません。そうでない場合は、NSASCIIStringEncodingおよびNSISOLatin1StringEncodingを試してください。

于 2012-07-23T09:20:25.720 に答える