一 背景

  前几天, 在公司写的获取文件描述的一段小程序出现了点小问题, 对于一般文件是正常的, 对于win10 C:\Program Files\WindowsApps目录下的通用程序,就是死活获取不到, 但是系统确是可以读出来的, 截图如下, 左边是能获取到的, 右边是比较各色的

之前用的方法参考

https://blog.csdn.net/liwen930723/article/details/49471459

vs跟踪调试了一下有问题的, 整个属性都获取到了, languageCharset也获取到了, 然后就是FileDescription死活获取不到, 但是看了看前边保存整个属性的内存, 文件描述就好好的躺在那, 左思右想不得要领, 于是拿调试器调试了一下系统是怎么获取的.原来系统是有备选方案的, 关键点就在 languageCharset上, 系统是先用从文件中读出来的languagecharset, 去获取, 获取不到再依次用0x040904B0,0x40904E4 ,0x04090000 去获取, 于是我按照这个逻辑试了一下, 真的就获取到了, 本文开头的问题就这么解决了, 但是你看系统给的备选值貌似存在某些规律, 而且 之前那个获取出来的languageCharset正好是0x00004B0, 于是又到网上去搜了搜, 结果发现, 正如这个东西的名字languagecharset, 高16bit 表示languageID, 低16bit表示codepage,

languageID: https://blog.csdn.net/tuwen/article/details/4160153 

codepage: https://baike.baidu.com/item/codepage/416287

0x409 表示英语,

0x4E4 表示西欧拉丁字母ISO-8859-1

0x4B0 表示UCS-2LE Unicode 小端序

因为0x00004B0 表示语言的部分为0, 所以系统显示的就是语言为中性, 备选的都是英语的codepage组合, 问题到这终于圆满解决了.

不过, 本以为所有的显示"语言中性"的都这德行, 然而并不是, 所以我推测应该是某些编译器在生成这部分信息的时候出现了问题, 导致 languageCharset 跟其他信息不一致. 但是微软居然填这种坑, 所以我大胆的推测, 这个要么是当初定这个结构标准的时候没有设计好, 要么就真的微软自家的某些编译器组件的问题

windows下获取文件描述的更多相关文章

  1. Windows下获取文件的md5码的方法

    1.certutil 命令简介 本来想找一个工具 算一个文件的md5 或者是sha 值来着. 找到一个说法是 可以使用 windows 自带的命令行来处理 具体命令 certutil -hashfil ...

  2. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  3. 关于Windows下的文件后缀名问题

    一.背景说明 有很多的小伙伴对windows下的文件后缀名不能很好地理解作用和区别,更不用说高深的使用了,在这里给大家说一下这些文件后缀名到底有什么区别,有什么作用呢? 二.说明 简单的说来,wind ...

  4. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  5. Windows下获取高精度时间注意事项

    Windows下获取高精度时间注意事项 [转贴 AdamWu]   花了很长时间才得到的经验,与大家分享. 1. RDTSC - 粒度: 纳秒级 不推荐优势: 几乎是能够获得最细粒度的计数器抛弃理由: ...

  6. Linux Linux下最大文件描述符设置

    Linux下最大文件描述符设置 by:授客 QQ:1033553122 1.   系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 6 ...

  7. c和c++在windows下获取时间和计算时间差的方法总结

    c/c++在windows下获取时间和计算时间差的几种方法总结 一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double diff ...

  8. 将Windows下的文件同步到Linux下

    需求:把Windows下的某些文件自动传送到Linux指定目录下 实现: 1. Windows下安装 WinSCP工具,并把Liunx服务器信息保存 2. 编写脚本,实现双击工具就把Windows下的 ...

  9. C语言实现Windows下获取IP和MAC地址。

    C语言实现Windows下获取IP和MAC地址. #include <winsock2.h> #include <stdio.h> #include <stdlib.h& ...

随机推荐

  1. Feign源码解析系列-那些注解们

    开始 Feign在Spring Cloud体系中被整合进来作为web service客户端,使用HTTP请求远程服务时能就像调用本地方法,可见在未来一段时间内,大多数Spring Cloud架构的微服 ...

  2. paddlepaddle

    1. 训练过程中cost出现nan 可能是因为有脏数据,寻找脏数据的方法就是,设置batch_size=1, paddle.reader.shuffle 中buf_size=1 一条一条的进行训练,看 ...

  3. Pycharm 常用快捷键与设置

    pycharm高频率使用的快捷键 Ctrl+Shift+F10 运行当前的页面 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 Shift + Enter 开始新行 T ...

  4. 关于java的scanner类

    java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 首先使用Scanner类时候需要导包: scanner类的基本语法: Scanner类 ...

  5. 2.7 while 、for 循环控制语句

    一.while语句: 在程序中,需要重复性的做某件事: 1.1.1 while: public class Test{ public static void main(String[] args){ ...

  6. 文件IO 相关的包:java.io文件——API

    文件IO 相关的包:java.io文件——API 1.Java.io.File类的使用(1)两种路径绝对路径:相对于当前路径:当前为 “工程名”(2)File类创建,对象为一个文件/目录,可能存在或不 ...

  7. vc6.0问题

    1.VC6不自动提示函数的参数 是工程中的.ncb文件有问题,把这个文件删除就正常了. 2.设置代码提示快捷键 Tools-->定制-->弹出框,按照下图设置  3.报错 (1)ident ...

  8. springboot入门1

    1引入springboot父依赖,和 spring-boot-starter-web的启动器 依赖引入后jar包展示依赖的情况 入门工程  配置数据源 package com.boot.web.con ...

  9. EBS查询在线用户

    转自:https://www.cnblogs.com/benio/archive/2011/03/10/1979417.html SELECT u.user_name, app.application ...

  10. VMware Workstation Pro 安装win7系统

    1.准备工作VMware Workstation Pro 虚拟机软件cn_windows_7_enterprise_x64_dvd_x15-70741.iso2.选择典型(推荐)(T) 单选按钮 3. ...