我正在开始使用SDL中的程序,显然需要为文件系统加载资源。 我希望程序中的文件调用与平台无关。我最初的想法是定义一个宏(让我们称之为路径的PTH),它是基于系统类型在预处理器中定义的,然后使用它在程序中进行文件调用。 例如
SDL_LoadBMP(PTH("data","images","filename"));
只会转换为与文件系统相关的内容。
如果宏是可接受的方式,那么这些宏会是什么样的(我如何检查正在使用的系统,在宏中连接字符串?)
如果没有,这样做的可接受方式是什么?
答案 0 :(得分:5)
Boost Filesystem module可能是你最好的选择。它对路径上的“/”运算符具有覆盖功能,因此您可以执行类似......的操作。
ifstream file2( arg_path / "foo" / "bar" );
答案 1 :(得分:2)
GLib有一些portable path-manipulation functions.如果您更喜欢C ++,那么还有boost::filesystem。
答案 2 :(得分:1)
没有必要将此作为宏。
一种常见的方法是抽象路径以使用正斜杠作为分隔符,因为(几乎意外!)很好地映射到大部分实际平台。对于那些没有的人,您只需在文件系统实现层内进行翻译。
答案 3 :(得分:0)
查看OS9 os.path.join(macpath)的python实现
def join(s, *p):
path = s
for t in p:
if (not s) or isabs(t):
path = t
continue
if t[:1] == ':':
t = t[1:]
if ':' not in path:
path = ':' + path
if path[-1:] != ':':
path = path + ':'
path = path + t
return path
我不熟悉在较旧的Mac上使用SDL进行开发。游戏资源的另一个替代方案是使用包文件格式,并将资源直接加载到内存中(例如map< string,SDL_Surface>)
因此,您将加载一个文件(甚至可能是拉链,在加载时解压缩)
答案 4 :(得分:0)
我只是在程序的启动代码中执行平台等效版本的chdir(data_base_dir);
,然后使用"images/filename"
形式的相对unix样式路径。这不起作用的最后系统是MacOS 9,现在完全不相关。