2011-06-22 80 views
0

有沒有人知道在Linux g ++中是否存在等價的MSVC _wrename? (cstdio文件相當於重命名使用常量爲wchar_t的*代替爲const char *作爲參數類型的Unicode使用功能)等價的MSVC++ _wrename在Linux g ++中?

謝謝!

+0

我的mingw-w64 CRT拷貝有這個。或者你正在尋找一個Linux/POSIX的替代品? – rubenvb

+0

我正在尋找一個linux替代品,我應該已經精簡。感謝您的回覆:) – Juicebox

回答

0

這是平臺特定的。恐怕你必須以某種方式將你的const wchar_t *轉換爲const char *。在Linux上,我認爲你可以使用iconv功能。

編輯:加速可能有東西給這個

+0

確實,我沒有考慮過Boost,但它似乎在文件系統庫中有類似的東西。我檢查它並說出它是否符合我的需要。謝謝。 – Juicebox

+0

C++標準(直到0x)根本不處理Unicode。 「char」和「wchar_t」幾乎都是未指定的,並且與Unicode(或「字符」,就此而言)無關。 – Philipp

+0

@Philipp:那麼wstring呢? –

3

的一點是,大多數文件系統等比NTFS存儲其字節 -strings文件名。通常沒有明確的編碼概念,但文件名必須是由零終止的非零字節的字符串。所以在所有這樣的系統中,文件系統函數只需要char*參數文件名,並且您必須自己指出如何處理編碼問題(如果有的話)。

Windows是特殊的,因爲NTFS中的文件名是以16位爲單位的空終止字符串。這與Windows上的16位wchar_t類型以及各種_w*文件系統功能並行不悖。

+0

非常有趣的感謝。還有一些我沒有得到的東西。在Linux上,當使用stdio重命名時,系統如何知道我們傳遞了一個ascii 8位字符串或一個編碼的unicode 16位字符串(作爲簡單的8位字符串傳遞)? (我不知道我的問題是否清楚......) – Juicebox

+1

@Juicebox:我知道的文件系統沒有編碼的概念。只要你認爲是正確的文件名就可以通過它們。順便說一句,沒有「8位ASCII」或「unicode 16位字符串」之類的東西。你可能意思是別的。 –

+1

作爲推論,大多數文件系統沒有包含文件名的「字符」的概念,只有「代碼單元」。你不能完全普遍地要求「這個文件名有多少個字符」(例如一個文件名可能包含一個流氓Unicode代理)。這只是一串字節與「由字符組成的文本」的概念之間的根本區別。前者非常容易,後者非常困難。 –