[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,错在哪里了?
//写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,错在哪里了?
[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();
}
}
}
回得楼上存在的,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==
ref string lpReturnedString,加个ref。楼主试试。
或者用StringBuilder lpReturnedString。
猜想是因为字符串虽然是引用类型,但行为和值类型类似,所以没有引用到。
用StringBuilder解决了,谢谢了。
谢谢大家