项目中用到 GetPrivateProfileString但是使用中, 发现 无法读出 ini 配置中的值,

比如Enable_log =3 我读到的是 API设置的默认值.

网上说可能时字符集编码的问题.

https://blog.csdn.net/Yl12fh/article/details/80495092

编码格式的问题,有可能是系统语言默认字符集的问题,也有可能是项目编码的问题,文件的问题
经排查,造成的原因是INI文件是用ANSI/utf8等格式保存的,将文件另存为Unicode编码格式,问题解决

带着问题, 测试多次,发现 字符编码的确会影响!!!

结果:

实际上,用utf8 还是会出现问题,

用Endoing.Default(Endoing.ASCII )就OK, 但是不支持中文.

确认下项目 编码


// 声明INI文件的写操作函数 WritePrivateProfileString()
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); // 声明INI文件的读操作函数 GetPrivateProfileString()
[System.Runtime.InteropServices.DllImport("kernel32")]
//private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);
private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); //创建文件 FileInfo fi = new FileInfo(_IniPath);
if (!fi.Exists)
{
var outputStream = File.Create(_IniPath);//OK 覆盖写 //读写异常bug 20190418
//INI文件是用ANSI/utf8等格式保存的,将文件另存为Unicode编码格式,
//创建ini文件 string编码格式, 读取ini string 编码 要相同.
//default (ASCII)问题解决!!! //UTF8失败, ASCII 不支持中文,半角
using (var writer = new StreamWriter(outputStream, Encoding.ASCII))
{
writer.AutoFlush = false; writer.Write("[App]" + "\r\n");
writer.Write("Version=" + _Version + "\r\n");
writer.Write("Enable_Log=0" + "\r\n"); //writer.Write("#WorkMode 1:单次, 2:批量" + "\r\n");
writer.Write("WorkMode=2" + "\r\n");//1:单次, 2:批量 else unknow writer.Flush();
writer.Close();
writer.Dispose();
} outputStream.Dispose();//需要释放,否则,其他程序无法读写 若不想让其他人改动,就不用处理,最后进程析构
} //修改文件 //read ini //读取INI文件指定
public static string INI_ReadString(string INI_Path, string section, string key, string Default)
{
Byte[] Buffer = new Byte[128];//512 65535
//int bufLen = GetPrivateProfileString(section, key, Default, Buffer, Buffer.GetUpperBound(0), INI_Path);
int bufLen = GetPrivateProfileString(section, key, Default, Buffer, 128, INI_Path);
//设定 Unicode,UTF8 的编码方式,否则无法支持中文 , 还是有bug
// 1.删除文件 2. 自动创建文件后 或 修改后 //只能支持ASCII(default)
string s = Encoding.GetEncoding(Encoding.ASCII.CodePage).GetString(Buffer,0, bufLen);
// s = s.Substring(0, bufLen);
//s.Replace('\0', ' ');
return s.Trim();
}

c# 使用GetPrivateProfileString 读ini数据 失败的更多相关文章

  1. Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件

    第一种INI配置文件 .ini 文件是Initialization File的缩写,即初始化文件. 除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户 ...

  2. mysql 插入数据失败防止自增长主键增长的方法

    mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...

  3. AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...

  4. 当插入数据失败时,防止mysql自增长字段的自增长的方法

    问题描述: 当mysql设置了自增长字段时(注意:一个表中只能设置一个自增长字段,可以不是主键,但必须是键 ),如果插入数据失败,那么自增长字段仍然会占用这个自增长值,再次成功插入数据时就会造成断层. ...

  5. Lync Server 2013中央管理存储:自动收集配置数据失败

    Lync Server 2013在安装本地配置存储到配置中央管理存储的本地副本时候提示错如信息:自动收集配置数据失败. 打开Lync Shell,输入Get-CsConfigurationStoreL ...

  6. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  7. C# 通过api函数GetPrivateProfileString读取ini文件,取不到值

    通过api函数GetPrivateProfileString读取ini文件,取不到值,测试了好长时间,都不行 确认程序,ini文件都没有错误的情况,最后发现是ini文件编码的原因. 将ini文件的编码 ...

  8. mysql SQLyog导入csv数据失败怎么办?

    分享下mysql使用SQLyog导入csv数据失败的解决方法 给mysql导入数据,选中某个表选择导入--导入使用本地csv数据即可,单有的时候不知道什么问题导入不成功!!! 给mysql导入数据,使 ...

  9. Homework 1_SQL Server中由于外键约束而删除数据失败

    SQL Server中由于外键约束而删除数据失败 原因分析:外键约束问题.在配置文件中配置了一对一的关系,外键也是唯一的.数据库中数据有严格的依赖关系. 而在业务逻辑中,在往数据库里删除数据之前,却忘 ...

随机推荐

  1. mysql-用命令导出、导入表结构或数据

    1. 导出整个数据库(表结构和数据) mysqldump -u用户名 -p  数据库名 > 导出的文件名 [root@localhost work]# mysqldump -uroot -p m ...

  2. space sniffer清理的空间

    部分超级大的单文件,比如数据库 C:\inetpub\logs\LogFiles\W3SVC4 C:\Users\clu\AppData\Local\JetBrains\Transient C:\Us ...

  3. 剑指Offer——反转链表

    Question 输入一个链表,反转链表后,输出链表的所有元素. Solution 如果空间复杂度要求为O(1)的话,可以考虑用三个指针来进行反转 如果没有空间复杂度限制的话,可以考虑用一个栈,将节点 ...

  4. Phoenix性能优化

    目录: 1.建表优化 2.二级索引 3.并行处理 1.建表优化 Salting 翻译成中文是加盐的意思,本质是在hbase的rowkey的byte数组的第一个字节位置设定一个系统生成的byte值, 这 ...

  5. <转载>获取运行中的TeamViewer的账号和密码

    #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <iostream> #pragma comment( li ...

  6. 直播P2P技术1-技术入门

    1. 直播协议 直播协议主要有RTMP,HLS,MPEG-DASH,RTSP,HTTP-FLV等.每种协议都各有长短,比如RTMP延迟低,但诞生于Adobe,依赖于Flash Player,在如今FL ...

  7. 虚拟机CentOS7网络配置

    *关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中  这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...

  8. hdu 5884 Sort 队列+多叉哈夫曼树

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  9. nova Evacuate

    作用:当一个 node down 掉后,在新的 node 上根据其 DB 中保存的信息重新 build down node 上虚机.这个往往在虚机 HA 方案中用到.它尽可能地将原来的虚机在新的主机上 ...

  10. js轮训

    Later.js,一个独立的JavaScript类库,提供了循环事件触发的高级应用,可以为项目替换以上两种方法. 通常,我们要完成复杂的时间预定,需要大量的if...else语句.Later.js提供 ...