c# 使用GetPrivateProfileString 读ini数据 失败
项目中用到 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数据 失败的更多相关文章
- Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件
第一种INI配置文件 .ini 文件是Initialization File的缩写,即初始化文件. 除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户 ...
- mysql 插入数据失败防止自增长主键增长的方法
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...
- AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...
- 当插入数据失败时,防止mysql自增长字段的自增长的方法
问题描述: 当mysql设置了自增长字段时(注意:一个表中只能设置一个自增长字段,可以不是主键,但必须是键 ),如果插入数据失败,那么自增长字段仍然会占用这个自增长值,再次成功插入数据时就会造成断层. ...
- Lync Server 2013中央管理存储:自动收集配置数据失败
Lync Server 2013在安装本地配置存储到配置中央管理存储的本地副本时候提示错如信息:自动收集配置数据失败. 打开Lync Shell,输入Get-CsConfigurationStoreL ...
- Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...
- C# 通过api函数GetPrivateProfileString读取ini文件,取不到值
通过api函数GetPrivateProfileString读取ini文件,取不到值,测试了好长时间,都不行 确认程序,ini文件都没有错误的情况,最后发现是ini文件编码的原因. 将ini文件的编码 ...
- mysql SQLyog导入csv数据失败怎么办?
分享下mysql使用SQLyog导入csv数据失败的解决方法 给mysql导入数据,选中某个表选择导入--导入使用本地csv数据即可,单有的时候不知道什么问题导入不成功!!! 给mysql导入数据,使 ...
- Homework 1_SQL Server中由于外键约束而删除数据失败
SQL Server中由于外键约束而删除数据失败 原因分析:外键约束问题.在配置文件中配置了一对一的关系,外键也是唯一的.数据库中数据有严格的依赖关系. 而在业务逻辑中,在往数据库里删除数据之前,却忘 ...
随机推荐
- 书_Delphi
1. 有讲 坦克大战 的那本Delphi叫什么 叫做:<<Delphi深度历险>> 2.
- UML类图(三)-------实例
实例分析1——登录模块 某基于C/S的即时聊天系统登录模块功能描述如下: 用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较, ...
- 2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行
我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了. ...
- Unity 3D 离线协议
在联网状态下,获得离线协议,然后导入到Untiy的协议管理器里. 以后在断网的情况下,也能离线使用Unity. 步骤: 1.生成 Request 文件.(Unity_v5.3.1f1.alf) 1) ...
- mysql分组取topn
本文来自 http://www.jb51.net/article/31590.htm 有些语句sql top n 是sqlserver语法 --按某一字段分组取最大(小)值所在行的数据 代码如下: ...
- 圆形ImageView(可设置边缘厚度和颜色)--第三方开源--CircleImageView
下载地址:https://github.com/hdodenhof/CircleImageView 使用的时候直接在xml中: <de.hdodenhof.circleimageview.Cir ...
- LeetCode OJ:Path Sum II(路径和II)
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- java学习笔记 --- 网络编程(网络的基础知识)
1.网络模型: |--OSI(open stystem Interconnection开放式系统互连) |--特点: 是一种异构系统互连的分层结构:提供了控制互连系统交互规则的标准骨架:定义一种抽象结 ...
- Git学习--创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- python编程实例-使用正则收集IP信息
#!/usr/bin/env python from subprocess import PIPE,Popen import re def getIfconfig(): p = Popen(['ifc ...