【发布时间】:2021-02-17 07:32:22
【问题描述】:
此帖子与此帖子不重复:dirent not working with unicode
因为我在不同的操作系统上使用它,我也不想做同样的事情。另一个线程试图简单地计算文件,我想访问更复杂的文件名。
我正在尝试通过 Windows 10 操作系统上的文件名检索数据信息。
为此,我使用dirent.h(外部c 库,但在c++ 中也非常有用)。
DIR* directory = opendir(path);
struct dirent* direntStruct;
if (directory != NULL)
{
while (direntStruct = readdir(directory))
{
cout << direntStruct->d_name << endl;
}
}
此代码能够检索位于特定文件夹中的所有文件名(一个接一个)。而且效果很好!
但是当它遇到一个包含字符“œ”的文件时,事情就变得疯狂了:
例子:
grosse blessure au cœur.txt
在我的程序中读作:
GUODU0~6.TXT
我无法在字符串名称中找到原始数据,因为您可以看到我的字符串变量与当前文件名无关!
我可以重命名文件并且它可以工作,但我不想这样做,我只需要从该文件名中读取数据,这似乎是不可能的。我该怎么做?
【问题讨论】:
-
"我的字符串变量与当前文件名无关!"你确定吗? ;)
-
@cigien:糟糕的骗局。错误的问题描述,错误的平台,没有适用的解决方案......
-
@AsteroidsWithWings 嗯,问题描述似乎相同。还有,为什么你认为这个平台是错误的?
-
@cigien 因为这些答案适用于 Mac 和 Linux,而这个问题是关于 Windows 的?问题描述完全不同:另一个问题是关于
readdir跳过文件;这个是关于接收 DOS“短路径”而不是完整路径。请在关闭之前完整阅读问题:请注意,这样做可能需要 3 分钟以上。 :) -
@scohe001
GUODO0~6.txt是您在 Windows 上找到的短路径。还有一个带有.txt文件扩展名的提示(尽管这不是证据)。当你知道时,你就知道了。