0

LPCSTR引数を介して特定の関数で開く必要があるファイルのリストがありますが、残念ながらそれらは非常に長いパスを持つ特定のフォルダー(メインプログラムルートのサブディレクトリ)にあり、入力したくありませんファイル名を渡したいときはいつでもそれを入れます。

より正確には、ファイル名を要求する関数 D3DXCreateTextureFromFile() があります。たとえば、ファイルa.pngb.pngc.pngが "...\Materials\Textures\Textures_For_This にあります。 \Textures_For_That\More_Specific_Texture_Location\" メイン プログラムのサブディレクトリ。このパスを登録して、無駄のない方法でファイル名引数に追加するにはどうすればよいですか?

これのようなもの:

D3DXCreateTextureFromFile(bla, **DECLARED_DIR** + a.png, bla)
//same for b.png, c.png

または、パスとファイル名を統合するサブ関数でさえ:

D3DXCreateTextureFromFile(bla, UnifyText(DECLARED_DIR, a.png), bla)
4

3 に答える 3

0

うん、ディレクトリをファイル名と結合し、必要に応じて区切り記号を含める関数を作成するのが最も簡単です。これを引数として渡したいので、文字列を割り当ててクリーンアップする必要がないようにしたいので、C++stringクラスを使用します。

私は一般的に次のようなことをします:

string TexturePath( LPCSTR filename = NULL )
{
    if( filename == NULL ) return string(TEXTURE_DIR);
    return string(TEXTURE_DIR) + "\" + filename;
}

もちろん、後で LPCSTR に暗黙的にキャストされる文字列に依存することになります。より明確にしたい場合は、(少し醜い)への呼び出しを行いstring::c_str()ます:

D3DXCreateTextureFromFile(bla, TexturePath("a.png").c_str(), bla)

[編集]

別の方法として、これをシングル スレッドで実行している場合は、静的バッファーを使用します。

LPCSTR TexturePath( LPCSTR filename = NULL )
{
    static char pathBuf[MAX_PATH];
    if( filename == NULL ) return TEXTURE_DIR;
    sprintf( pathBuf, "%s\\%s", TEXTURE_DIR, filename );
    return pathBuf;
}
于 2012-08-20T23:56:24.600 に答える
0
    String main_dir="C:\\\Materials\\Textures\\Textures_For_This\\Textures_For_That\\More_Specific_Texture_Location\\";
    String files[]={"a.png","b.png","c.png"};
    String fullpath=main_dir;
    fullpath+=files[0];

    D3DXCreateTextureFromFile(bla, fullpath.c_str(), bla);
于 2012-08-20T23:52:45.933 に答える
0

C++ を使用している場合は、stringstream を使用して 2 つの文字列を連結し、結果の文字列で .c_str() を呼び出してみませんか。または、c スタイルの strcat を使用して、十分な大きさのバッファーにすることもできます。

于 2012-08-20T23:53:31.100 に答える