我应该使用什么函数在 mac OS X 中打开文件?
What function should I use to open file in mac OS X?
我使用 C++ Builder 创建我的跨平台应用程序。
在应用程序中,我将通过打开文件对话框获取文件 name/path。
在Windows中,照顾unicode字符串是没有问题的。 (例如 "C:\測試")
在 mac OS X 中,我可以从 UnicodeString 中获取正确的字符串。但是我找不到好的方法将其转换为char数组并使用"fopen"正确打开文件。
我试图将 UnicodeString 直接分配给 AnsiString 但它变成了 "C:\??"。
因为"fopen"只接受"char*"而UnicodeString只能导出"char16*",所以我需要将它转换为char for "fopen"。
有什么想法吗?
仅仅因为 fopen()
采用 char*
并不意味着您应该给它一个 ANSI 字符串。 POSIX OSX 上的 API 接受 UTF-8 编码的文件名,因此请使用 UTF8String
而不是 AnsiString
。 char*
可以指向 UTF-8 字符串。
否则不要直接使用fopen()
。请改用 RTL 自己的函数,例如 System.SysUtils.hpp
单元中的 FileCreate()
/FileOpen()
,或 System.Classes.hpp
单元中的 TFileStream
class。让 RTL 在内部决定如何为您与平台 API 交互。
我使用 C++ Builder 创建我的跨平台应用程序。 在应用程序中,我将通过打开文件对话框获取文件 name/path。 在Windows中,照顾unicode字符串是没有问题的。 (例如 "C:\測試") 在 mac OS X 中,我可以从 UnicodeString 中获取正确的字符串。但是我找不到好的方法将其转换为char数组并使用"fopen"正确打开文件。 我试图将 UnicodeString 直接分配给 AnsiString 但它变成了 "C:\??"。 因为"fopen"只接受"char*"而UnicodeString只能导出"char16*",所以我需要将它转换为char for "fopen"。 有什么想法吗?
仅仅因为 fopen()
采用 char*
并不意味着您应该给它一个 ANSI 字符串。 POSIX OSX 上的 API 接受 UTF-8 编码的文件名,因此请使用 UTF8String
而不是 AnsiString
。 char*
可以指向 UTF-8 字符串。
否则不要直接使用fopen()
。请改用 RTL 自己的函数,例如 System.SysUtils.hpp
单元中的 FileCreate()
/FileOpen()
,或 System.Classes.hpp
单元中的 TFileStream
class。让 RTL 在内部决定如何为您与平台 API 交互。