2017-03-17 6 views
1

C++ Builderを使用してクロスプラットフォームアプリケーションを作成しています。 アプリでは、ファイル名/パスを開いたファイルダイアログで取得します。 Windowsでは、ユニコード文字列を気にする必要はありません。 (例: "C:\測試") Mac OS Xでは、UnicodeStringから正しい文字列を取得できます。しかし、私はchar配列に変換し、 "fopen"を使ってファイルを正しく開くための良い方法を見つけることができません。 AnsiStringにUnicodeStringを直接割り当てようとしましたが、 "C:\ ??"になりました。 "fopen"は "char *"のみを受け付け、UnicodeStringは "char16 *"しかエクスポートできないので、 "fopen"のためにcharに変換する必要があります。 Mac OS Xでファイルを開くにはどのような機能を使用しますか?

+0

[\ _wopopen相当のMac OS X対応版](http://stackoverflow.com/questions/12319/wfopen-equivalent-under-mac-os-x) –

答えて

0

ちょうどfopen()char*を受け取っているからといって、ANSI文字列を与える必要はありません。 OSX上のPOSIX APIは、UTF-8でエンコードされたファイル名を受け入れるので、AnsiStringの代わりにUTF8Stringを使用してください。 char*は、UTF-8文字列を指すことができます。

それ以外の場合は、fopen()を直接使用しないでください。代わりにFileCreate()/FileOpen()System.SysUtils.hpp単位、またはTFileStreamクラスのSystem.Classes.hpp単位のRTL独自の関数を使用してください。 RTLが内部的にプラットフォームAPIと対話する方法を決定します。

関連する問題