• C#用API读取.ini非中英文路径失败问题


    写的软件在中文或英文路径下运行没有问题,但是在韩文或者其他文字路径下就无法运行,最后发现是.ini读取问题,  调用dll的时候加上CharSet = CharSet.Unicode,就可以解决   [DllImport("kernel32", CharSet = CharSet.Unicode)]

    public class IniFile
        {
            public string Path;

            public IniFile(string path)
            {
                this.Path = path;
            }

            #region 声明读写INI文件的API函数
            [DllImport("kernel32", CharSet = CharSet.Unicode)]
            private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

            [DllImport("kernel32", CharSet = CharSet.Unicode)]
            private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath);

            [DllImport("kernel32", CharSet = CharSet.Unicode)]
            private static extern int GetPrivateProfileString(string section, string key, string defVal, Byte[] retVal, int size, string filePath);
            #endregion

            /**/
            ///


            /// 写INI文件
            ///

            /// 段落
            ///
            ///
            public void IniWriteValue(string section, string key, string iValue)
            {
                WritePrivateProfileString(section, key, iValue, this.Path);
            }

            /**/
            ///


            /// 读取INI文件
            ///

            /// 段落
            ///
            /// 返回的键值
            public string IniReadValue(string section, string key)
            {
                StringBuilder temp = new StringBuilder(255);

                int i = GetPrivateProfileString(section, key, "", temp, 255, this.Path);
                return temp.ToString();
            }

            /**/
            ///


            /// 读取INI文件
            ///

            /// 段,格式[]
            ///
            /// 返回byte类型的section组或键值组
            public byte[] IniReadValues(string section, string key)
            {
                byte[] temp = new byte[255];

                int i = GetPrivateProfileString(section, key, "", temp, 255, this.Path);
                return temp;
            }

            public List ReadSections(string iniFilename)
            {
                List result = new List();
                Byte[] buf = new Byte[65536];
                int len = GetPrivateProfileString(null, null, null, buf, buf.Length, iniFilename);
                int j = 0;
                for (int i = 0; i < len; i++)
                {
                    if (buf[i] == 0)
                    {
                        result.Add(Encoding.Default.GetString(buf, j, i - j));
                        j = i + 1;
                    }
                }
                return result;
            }


            ///


            /// 验证文件是否存在
            ///

            /// 布尔值
            public bool ExistINIFile()
            {
                return File.Exists(this.Path);
            }
        }

  • 相关阅读:
    leetcode 10. 正则表达式匹配(dp)
    echarts利用graphic属性给饼图添加内圈图片及外圈图片(可自适应宽度位于饼图中心)
    MyBatis源码剖析之Mapper代理方式细节
    leetcode209. 长度最小的子数组
    Java贪心算法
    数论简单问题
    蓝桥杯2024年第十五届省赛真题-小球反弹
    论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(中)
    7-3 LVS+Keepalived集群叙述与部署
    网关 Spring Cloud Gateway - API 调用的组织者
  • 原文地址:https://blog.csdn.net/u013489804/article/details/133801302