2010-11-30 9 views
6

主にC++で書かれたiOSアプリケーションでstd :: ifstreamを使用してassetsフォルダとそのサブフォルダに保存されているファイルを読み込もうとしています(他の、非iOSプロジェクト)が見つかりませんでした。例:ファイルがある資産/シェーダは/ ortho2d.vertと私はこのようにそれをロードしようとしている:iOSアプリケーションでC++を使用してフォルダ内のファイルが見つかりません

std::ifstream vertFStream(vertFile); // vertFile's contents is "assets/shaders/ortho2d.vert" 
if (!vertFStream) { 
    std::cerr << vertFile << " missing!" << std::endl; 
    exit(1); 
} 

私はそれを青いフォルダとしてXcodeプロジェクトに資産フォルダを追加しました[ターゲット] - > [バンドルリソースのコピー]に表示されます。

答えて

10

はこれを試してみてください:

NSBundle *b = [NSBundle mainBundle]; 
NSString *dir = [b resourcePath]; 
NSArray *parts = [NSArray arrayWithObjects: 
        dir, @"assets", @"shaders", @"ortho2d.vert", (void *)nil]; 
NSString *path = [NSString pathWithComponents:parts]; 
const char *cpath = [path fileSystemRepresentation]; 
std::string vertFile(cpath); 
std::ifstream vertFStream(vertFile); 
+1

何語のJavaを使用することはありますか?それは間違いなくC++ではありません。 –

+1

言語は、あなたが自由に目的をミックスすることを可能にするのObjective-C++、あります-CおよびC++コード.Appleの「Objective-CでのC++の使用」(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html)を参照してください。情報。 –

+0

ありがとう!魅力のように動作します。 – SurvivalMachine

1

アプリケーションが実行されている場所からの相対パスを確認し、おそらく完全パスを使用してファイルが見つかるようにする必要があります。

openが失敗しても、ファイルが見つからないというわけではありません。この時点では読み込みができない可能性があります。 (不正な権限またはファイルがロックされています)。

exit(1)はかなり劇的です。

0

申し訳ありませんが、いくつかの句読点:C++からファイルシステムコールを使用してiOSの

  1. は、セキュリティの観点から、セキュリティ上の問題と制限されたサポートのために非常に落胆です。 ファイルシステムへの呼び出しは、iOSアプリ
    フォルダのレイアウトが適切であることを確認してください。 (バンドル、リソース、ドキュメントフォルダなど) それ以外の場合は失敗しますc)あなたはC++とobjCを混在させることができますが、確かに は正しいアプローチではありません。非常に限られたケースでは)
  2. 使用のiOSのAPI、正確アンドロイド下としてあなたが