gpt4 book ai didi

c - fopen() 的非 ascii 文件名

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:55 25 4
gpt4 key购买 nike

我需要一个强大的跨平台解决方案来读取 C 中的特定二进制文件。假设我想要 fopen()这样的(可能很大)文件,分配一个临时缓冲区,然后 fread()字节序列更新我的 SHA1_CTX最后关闭我的文件,完成 sha1 并继续。很简单,对吧?

但是,我怀疑一件事:如果文件名不是 ASCII 怎么办?假设我将拥有:

  • /Users/me/Projects/my_file.bin
  • /home/me/файлы/работа/мой_файл.bin
  • С:\\我的文件\\我的工作.bin
  • D:\\Folder🙈\\🙂👍😘.bin

fopen 可以处理这样的路径吗?如果没有,我该怎么办?我可能会写一些特定于平台的代码或寻找一些跨平台的库,但我的应用程序尽可能小是非常重要的,而且它是用 C 编写的,所以 QT、Boost 等不适用.

谢谢。

最佳答案

基本上在除 Windows 之外的每个平台上,期望您将文件名作为普通 char[] 字符串传递给标准函数,字符串以正在使用的语言环境的字符编码表示,并且在所有现代平台上将是 UTF-8 的系统。您可以:

  • 通过确保调用 setlocale(LC_ALL,"")(或 setlocale(LC_CTYPE,"")(如果您不想使用其他语言环境)来兑现这一点功能)并将所有本地文本输入和输出视为任何编码(使用户满意但可能会在 UTF-8 中的某些外部输入(例如来自网络)无法表示时造成麻烦,或者
  • 总是在 UTF-8 中工作,希望将 UTF-8 字符串传递给文件系统访问函数是因为它们是抽象字节数组。

不幸的是,这些在 Windows 上都不起作用,但它 will work in the near future .如果您使用 Cygwin 构建您的应用程序,它也适用或 midipix .除此之外,您需要填充程序才能在 Windows 上运行,这是一个巨大的痛苦。

关于c - fopen() 的非 ascii 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53240475/

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