0

非常に大きなアプリケーションをAndroidに移植しました。TCP / IPを介してバイナリデータを受信し、アプリケーションで時々使用するファイルに書き込みます。ファイルを保存するディレクトリは、デフォルトで./file_cacheに設定されています。ここでうまくいかない:

fileHandle = fopen(filename,"wb");

この場合のファイル名は「file_i」です。ここで、iは0から始まり、ファイルごとに増加します。

プログラムは書き込み中にクラッシュし、最初のファイルでクラッシュする必要はありません。場合によっては、10番目のファイルまでクラッシュします。クラッシュすると、fileHandleはNULLになります。

ファイル名は最初はwcharにありますが、前に変換されます(ロガーで印刷して、正しいことを確認します)。

私が試したこと:

  • ファイルの読み取り/書き込み外部ストレージと関係があると思われるすべてのアクセス許可を追加しました。

  • / sdcard/filesと/data/ data / <package>/filesの異なる場所を試しました

質問:

  1. 現在のディレクトリは何ですか。つまり、ファイルは実際にはデフォルト設定のどこにありますか?

  2. fopenがnullを返す原因は何ですか?これがクラッシュの原因です。

どんなアイデアにもとても感謝しています。

4

1 に答える 1

0

一般的なプログラムエラーでしたが、問題が見つかりました。ファイル名「file_i」は、サイズ1が割り当てられた複雑なコードが原因でした。これは当然小さすぎて、セグメンテーション違反が発生しました。したがって、fopenとは何の関係もありませんでした。実際、私がこれまでに経験したすべてのセグメンテーション違反は、これに似た障害が原因で発生したため、char / wcharをいじっているときはいつでも、コードを精査する価値があります。

さらに、私は/ data / data / ..フォルダーを使用していますが、これは正常に機能し、実際にsdcardを試したことがありませんが、なぜ機能しないのかわかりません。

于 2013-05-28T15:14:15.683 に答える