2009-06-29 48 views

回答

7

如果你想在編譯的時候,你當然可以這樣做

#ifdef WIN32 
#define OS_SEP '\\' 
#else 
#define OS_SEP '/' 
#endif 

或者你可以只用「/」,事情會工作得很好的窗口(除了解析舊的程序做字符串,只能使用'\')。如果以這種方式顯示給用戶,它看起來很有趣。

7

正如情況經常如此,Boost有一個庫,它可以做你想做的。 Here是一個教程。

+1

我真的需要一個「完整」庫來選擇/還是\? – Janusz 2009-06-29 02:49:42

+3

不,但這不是DOS和Unix文件名之間的唯一區別。事實上,斜槓被DOS(以及反斜槓)接受 - 但不能由cmd.exe命令解釋器接受。 – 2009-06-29 03:20:43

1

一個簡單的方法來做你要求的是有一個小的(可能是內聯)功能,使用預處理器魔術來確定平臺(#ifdef WIN32等)並返回相應的分隔符。

答案有點複雜,因爲除了分隔符還有其他更重要的區別。 Windows文件系統可以有多個根(C:\,D:\等),而整個FS根源於/在Unix-land。

最好的建議可能是使用boost::filesystem

2

無處不在內部使用'/'。然後編寫一組實用函數,將任一形式的路徑導入爲'/'。編寫一個具有系統特定ifdefs和必要轉換的「本機路徑」功能。可以根據需要調用。

相關問題