[DllImport("kernel32")]
        //写INI文件API函数
 public static extern Int32 WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);
        
        [DllImport("kernel32")]
        //读INI文件API函数       
        public static extern Int32 GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, string lpReturnedString, Int32 nSize, string lpFileName);
        #endregion
 private string _INIFileName;
        public string INIFileName
        {
            get { return _INIFileName; }
            set { _INIFileName = value; }
        }        public ClsINI(string INIFileName)
        {
            _INIFileName = INIFileName;
        }        #region "读写指定键"
        //写指定键的值
        public bool Write(string SectionName, string KeyName, string Value)
        {
            try
            {
                WritePrivateProfileString(SectionName, KeyName, Value, _INIFileName);
                return true;
            }
            catch
            {
                return false;
            }
        }
 
//读指定键的值
    
        public string Read(string SectionName, string KeyName)
          {
            string returnValue;
            Int32 intRetval;
            string Strdata =  new string(' ', 1024);
           
            try
            {
                intRetval = GetPrivateProfileString(SectionName, KeyName, null, Strdata, Strdata.Length, _INIFileName);
                 
                if (intRetval > 0)
                {
                 
                   returnValue= Strdata.Substring(0, intRetval);
                                            
                }
                    
                else
                {
                    returnValue = "";
                }
            }
            catch
            {
                returnValue = "";
            }
            return returnValue;    
           
        }
写入INI文件是正常的,但在读取时returnValue值是NULL,错在哪里了?

解决方案 »

  1.   

    看看KeyName在section里面存在不存在,跟踪下看是否有异常
      

  2.   


    [ServerVersion]
    Deal=1.0.5.6
    [ClientVersion]
    Deal=1.0.5.6
    [ServerUrl]
    Deal=
    [ReportPackUrl]
    Deal=using System;
    using System.Text;
    using System.Runtime.InteropServices;namespace AppUpdater
    {
        /// <summary>
        /// Config.ini
        /// </summary>
        public class ini
        {
            //声明读写INI文件的API函数 
            [DllImport("kernel32")]
            private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
            [DllImport("kernel32")]
            private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);        public ini()
            {
            }
            /// <summary>
            /// 服务器版本
            /// </summary>
            public static string ServerVersion
            {
                get
                {
                    return Read("ServerVersion", "Deal", System.AppDomain.CurrentDomain.BaseDirectory + @"template.ini");
                }
                set
                {
                    string flag = value;
                    Write("ServerVersion", "Deal", flag, System.AppDomain.CurrentDomain.BaseDirectory + @"template.ini");
                }
            }        /// <summary>
            /// 客户端版本
            /// </summary>
            public static string ClientVersion
            {
                get
                {
                    return Read("ClientVersion", "Deal", System.AppDomain.CurrentDomain.BaseDirectory + @"template.ini");
                }
                set
                {
                    string flag = value;
                    Write("ClientVersion", "Deal", flag, System.AppDomain.CurrentDomain.BaseDirectory + @"template.ini");
                }
            }        public static void Write(string Section, string Key, string values, string file)
            {
                long i = WritePrivateProfileString(Section, Key, values, file);
            }        public static string Read(string Section, string Key, string file)
            {            StringBuilder sb = new StringBuilder(255);
                /*返回值1为成功,0为失败,如果失败返回0默认为简体中文*/
                int i = GetPrivateProfileString(Section, Key, "", sb, 255, file);
                return sb.ToString().Trim();
            }
        }
    }
      

  3.   


    回得楼上存在的,keyname="connectionstring"
    我想应该是string Strdata = new string(' ', 1024);这条语句定义出问题了,上面的代码是VB翻写来的(dim strdata=string.space(1024),因为C#没有space方法附上INI文件
    [System.Data.OleDb]
    ConnectionString=FrdbxCNOSlt4DlpMPa9/6B59ku6mGr1Uw3A66TlRs8+3ij6h81m1VX0itC3PqoXrpONwaBFW7T7I+CadSDaBn01kXM/26oQjh3EPFiPH/SaKvl5oML5msvCYWo8cnmoX3N2kte60tKukHEp2TPK/2gvw4Vgy6EdYtmUcAhlP3YPq0bW8tcSQMQ==
    ConnectionStringPivot=Mm5a2CTRhuGZ6bUQmh7c4MzyselIGl9WhFoXSxoX2PYlEY3vnG/Tj5UcDv1rKLbVr4tcmGxreDoEg1QauHrMHeWPFNBfZHYGaa1JH5Ms6DD5muyMAZkCpCYNCtDhac+yX7Luop1D4occp1u0yn6SoQ==
      

  4.   

    public static extern Int32 GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, ref string lpReturnedString, Int32 nSize, string lpFileName);
     ref string lpReturnedString,加个ref。楼主试试。
    或者用StringBuilder lpReturnedString。
    猜想是因为字符串虽然是引用类型,但行为和值类型类似,所以没有引用到。
      

  5.   


    用StringBuilder解决了,谢谢了。
    谢谢大家