【问题标题】:how to stat file with non ascii characters如何使用非 ascii 字符统计文件
【发布时间】:2012-04-18 17:26:36
【问题描述】:

对于普通文件路径,我可以使用 stat 并获取它的大小。当路径包含 C:\temp\sमानकe\app.log 等非 ascii 名称时,它不起作用。

int main(int argc, char * argv[])
{
      struct stat FileAttrib;

      if (stat(argv[1], &FileAttrib) < 0) {
            printf("File Error Message = %s\n", strerror(errno));
      }
      else
      {
           printf("File size %d\n",  FileAttrib.st_size);
      }
      return 0;
}

stat 只需要 char *。从命令提示符收到的路径并不是真正的有效文件。

【问题讨论】:

  • 如果您能够以其他方式打开文件,您可以随时在文件描述符上使用fstat()
  • 我的mingw终端,我的编辑都不允许我输入这样的字符。哈哈:)
  • 你确定你交出正确编码和转义的文件名吗?使用“ls 'C:\temp\sमानकe\app.log'”进行测试。
  • @Pavan Manjunath:我用过薄荷。查看输出。
  • 您的 main 被声明为采用 ASCII 参数,因此您的非 ASCII 命令行甚至无法完整地转换为 main

标签: c file-io utf-8 character-encoding


【解决方案1】:

假设您使用的是 Windows,请尝试使用 GetShortPathNameW 获取短路径名称(如果存在),然后将短名称传递给 stat()

【讨论】:

  • 在我的 WinNT 6.3 上,如果短路径名对于 8.3 格式来说不太长,那么它们仍将包含非 ASCII 字符。
  • 哎哟。有趣的。这仅适用于 一些 NTFS 卷。虽然对其他人按预期工作。好吧,无论如何不能被认为是可靠的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2016-07-30
相关资源
最近更新 更多