gpt4 book ai didi

c++ - 如何读取带有unicode文件名c++的二进制文件?

转载 作者:可可西里 更新时间:2023-11-01 16:23:36 31 4
gpt4 key购买 nike

在我从事的项目中,我处理了很多字符串操作;从二进制文件中读取字符串及其编码(可以是单字节或双字节)。本质上,我将字符串值读取为 vector<char> , 读取编码然后将所有字符串转换为 wstring , 为了保持一致性。

这工作得相当好,但是文件名本身可以是双字节字符。我完全不知道如何实际打开输入流。在 C 中我会使用 _wfopen函数传递 wchar_t* path ,但是wifstream似乎表现不同,因为它专门设计用于从文件中读取双字节字符,而不是用于从具有双字节文件名的文件中读取单个字节。

这个问题的解决方案是什么?

编辑: 在网络上搜索,标准 C++ 似乎对此根本不支持(例如,参见 this discussion)。但是我想知道 C++11 是否真的在这个领域添加了一些有用的东西。

最佳答案

你传递给 open 的字符串是如何映射到一个文件名的实现依赖。在 Unix 环境中,它通过几乎字面意思——只有 '/''\0' 被处理特别。在其他环境中,其他规则规则,我已经过去有问题,因为我在 Unix 中写了一个文件,并且在 Windows 下无法对它做任何事情(处理 ':'特别在文件名中)。

另一个问题是这些文件来自哪里。如前所述以上,可能绝对无法在您的设备上打开它们系统:带有 ':' 的文件名根本无法打开 window 。在 Unix 中,如果你以 '\0' 字符结尾文件名本身,您可能也无法读取它们,以及 UTF16文件名将在下面显示为 '\0' 字符Unix。您唯一的解决方案可能是在生成文件以重命名它们的系统。

我不太清楚如何在 Unix 上获得这样的文件名磁盘放在首位。 SMB 服务器(例如 Samba)如何在 Windows 机器上服务时映射 UTF16 文件名?或者一个NFS服务器——我想Windows下也有这样的东西。

关于c++ - 如何读取带有unicode文件名c++的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158018/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com