【问题标题】:How to get real file name without tilde substitution如何在不替换波浪号的情况下获取真实文件名
【发布时间】:2013-11-28 02:00:49
【问题描述】:

我使用 dirent.h 库来获取文件名。虽然其中大多数是正确的,但这个:

1ZdjĂ„„˘cie główne.JPG_38ba97e477158efb3563274f5bd39af7.jpg_cda6829b61253f64b44a5c7f15e00b45 - Copy.jpg

读作

1ZDJCI~2.JPG

我可以做些什么来防止波浪号替换行为?

我使用的是 Windows 7,Visual Studio C++

路径“./tiles/”

DIR *dir;
struct dirent *ent;
if ((dir = opendir(path.c_str())) != NULL) {
while ((ent = readdir(dir)) != NULL) {
if( strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0 ) { continue; }
string a(ent->d_name);

“正确”(无波浪号替换)文件名示例: "2012-07-29- 227.jpg_955c70788013c4979d5cad857b49d4d2.jpg_8551b27380326b183c17e3469ec97cd3.jpg" “2012-07-29-228.jpg_5b2281bbe1efd6bd7469c4a29114a210.jpg_ee6d3a75864e7e33b3d99c023c962dbf.jpg” “2012-08-31-842.jpg_93562fa908083e5a070467558bba2141.jpg_2e84cdbc1d5a5eb932a1373840119aa4.jpg”

【问题讨论】:

  • ...文件名是否合理?
  • 你是怎么得到文件名的?
  • 'dirent.h` - 这是一个 POSIX 兼容接口
  • 列出几个“正确”的文件名。
  • 您使用的方法可能不支持 Unicode 和/或长路径。也许使用 UTF-16 Win32 函数并转换回 UTF-8 或您想使用的任何编码?除非你需要跨平台的东西。

标签: c++ tilde


【解决方案1】:

您可以拨打GetLongPathName将短名称(NAME~1.EXT)转换为长名称。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2012-09-04
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多