2011-06-22 13 views
0

MSVC _wrenameがlinux g ++に存在するかどうかは誰にも分かりますか? (Unicodeの使用のためのパラメータの型として代わりにのconst char型のcstdioをファイルの同等のconst wchar_t型を使用して機能の名前を変更* *linux g ++のMSVC++ _wrenameに相当しますか?

ありがとう!

+0

私のmingw-w64 CRTにはこれがあります。あるいは、Linux/POSIXの代替案をお探しですか? – rubenvb

+0

私はLinuxの代替を探しています、私はprecuredする必要があります。あなたの返信をありがとう:) – Juicebox

答えて

0

プラットフォームに固有です。私はconst wchar_t *をconst char *に変換しなければならないと思います。 Linuxでは、iconv関数を使うことができると思います。

EDIT:ブーストは、おそらくポイントはNTFSストアバイト -stringsで、ファイル名よりも、ほとんどのファイルシステムをということである。この

+0

確かに、私はブーストについては考えていませんでしたが、それはファイルシステムのlibのようなものを持っているようです。私はそれをチェックし、それが私が必要とするものに合っているかどうかを言う。ありがとう。 – Juicebox

+0

C++標準(0xまで)は、Unicodeをまったく扱っていません。 'char'と' wchar_t'の両方は、ほとんど完全には特定されておらず、Unicode(または "文字")とは何の関係もありません。 – Philipp

+0

@Philipp:wstringはどうですか? –

3

のために何かを持っています。通常、エンコーディングの明示的な概念はありませんが、ファイル名は0で終わる非ゼロバイトの文字列でなければなりません。したがって、このようなシステムでは、ファイルシステム関数はファイル名の引数をchar*とするだけで、エンコードの問題を処理する方法を自分で判断する必要があります。

NTFSのファイル名は16ビット単位のヌルターミネーション文字列であるため、Windowsは特殊です。これは、Windows上の16ビットwchar_tタイプと、さまざまなファイルシステム機能の_w*と関連しています。

+0

非常に面白いおかげで。私はまだ得られないものがあります。 linuxでは、stdio renameを使用すると、asciiの8bit文字列またはコード化されたUnicode 16bit文字列(単純な8bit文字列として渡される)をシステムがどのように受け渡すかを知ることができますか? (私の質問がはっきりしているかどうかわかりません...) – Juicebox

+1

@Juicebox:私が知っているファイルシステムはエンコーディングの概念を持っていません。正しいファイル名だと思うものをそのまま渡すだけです。ちなみに、「8ビットASCII」や「ユニコード16ビット文字列」などはありません。あなたはおそらく他の何かを意味するでしょう。 –

+1

結果として、ほとんどのファイルシステムは、ファイル名を含む「文字」の概念を持たず、「コード単位」のみを持ちます。あなたは完全に一般に「このファイル名は何文字ですか」と尋ねることはできません(たとえば、ファイル名は単一の不正なUnicodeサロゲートからなるかもしれません)。これはバイト列と "文字からなるテキスト"という概念の根本的な違いに過ぎません。前者は非常に簡単で、後者は非常に難しい。 –

関連する問題