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
    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-style,strcat 变成一个足够大的缓冲区。

于 2012-08-20T23:53:31.100 回答
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 回答