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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)