如何使用非ascii字符统计文件

如何使用非ascii字符统计文件,c,file-io,utf-8,character-encoding,C,File Io,Utf 8,Character Encoding,对于普通文件路径,我可以使用stat并获取其大小。当路径包含非ascii名称时,如C:\temp\sमानकe\app.log,它不工作 int main(int argc, char * argv[]) { struct stat FileAttrib; if (stat(argv[1], &FileAttrib) < 0) { printf("File Error Message = %s\n", strerror(errno)

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

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;
}
intmain(intargc,char*argv[])
{
struct stat FileAttrib;
if(stat(argv[1],&FileAttrib)<0){
printf(“文件错误消息=%s\n”,strerror(errno));
}
其他的
{
printf(“文件大小%d\n”,FileAttrib.st\u size);
}
返回0;
}
stat只接受char*。从命令提示符接收的路径实际上不是有效文件


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

如果您能够以其他方式打开文件,则可以始终在文件描述符上使用
fstat()
。我的mingw终端和我的编辑器都不允许我输入此类字符。哈哈:)你确定你交出了正确编码和转义的文件名吗?使用“ls”C:\temp\s进行测试मानकe\app.log'。@Pavan Manjunath:我用的是mintty。查看输出。您的
main
被声明为采用ASCII参数,因此您的非ASCII命令行甚至没有完整地进入
main
中。在我的WinNT 6.3上,如果短路径名称对于8.3 format.Ouch来说不太长,则短路径名称仍将包含非ASCII字符。有趣。这仅适用于某些NTFS卷。而对其他人来说,效果与预期一样。无论如何,这也不能被认为是可靠的。