以下是读ini文件的类
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace Sx_Mdi
{ /// <summary>
/// Summary description for Class1.
/// </summary>
public class IniFile
{
//文件INI名称
public string Path; ////声明读写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);
//类的构造函数,传递INI文件名
public IniFile(string inipath)
{
//
// TODO: Add constructor logic here
//
Path = inipath;
} //写INI文件
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,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(); }
}
}
以下是用到类的地方
public static string GetPath()
{
string strpath = System.Windows.Forms.Application.StartupPath+"\\out.ini";
return strpath;
}
public static string MyDatainfo()
{
string sPath;
string ServerName, userId, sPwd, DataName; sPath = GetPath();
IniFile ini = new IniFile(sPath);
ServerName = ini.IniReadValue("Database", "server");
userId = ini.IniReadValue("Database", "uid");
sPwd = ini.IniReadValue("Database", "pwd");
DataName = ini.IniReadValue("Database", "database");
string strSql = "server =" + ServerName + ";uid =" + userId + ";pwd =" + sPwd + ";database =" + DataName;
return strSql;
}
ini文件里就有
[Database]
server=localhost
database=outlook
uid=root
pwd=''点破东西结果MyDatainfo()
里那四个变量都是空的
咋搞的呢?
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace Sx_Mdi
{ /// <summary>
/// Summary description for Class1.
/// </summary>
public class IniFile
{
//文件INI名称
public string Path; ////声明读写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);
//类的构造函数,传递INI文件名
public IniFile(string inipath)
{
//
// TODO: Add constructor logic here
//
Path = inipath;
} //写INI文件
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,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(); }
}
}
以下是用到类的地方
public static string GetPath()
{
string strpath = System.Windows.Forms.Application.StartupPath+"\\out.ini";
return strpath;
}
public static string MyDatainfo()
{
string sPath;
string ServerName, userId, sPwd, DataName; sPath = GetPath();
IniFile ini = new IniFile(sPath);
ServerName = ini.IniReadValue("Database", "server");
userId = ini.IniReadValue("Database", "uid");
sPwd = ini.IniReadValue("Database", "pwd");
DataName = ini.IniReadValue("Database", "database");
string strSql = "server =" + ServerName + ";uid =" + userId + ";pwd =" + sPwd + ";database =" + DataName;
return strSql;
}
ini文件里就有
[Database]
server=localhost
database=outlook
uid=root
pwd=''点破东西结果MyDatainfo()
里那四个变量都是空的
咋搞的呢?
解决方案 »
- BeginReceive 出现由于系统缓冲区不足或者队列已满,不能执行套接字上的操作!
- DataRow.length是什么意思?刚学这个,请前辈指点下!
- 请问一下关于 lock 的问题
- MaxLength设置后不起作用
- 想在.net 2003 中 为String 添加方法 IsNullOrEmpty
- 页面a有一iframe b 我要在b中获取a的url,如何做?大家帮忙,急呀~
- datagrid 里更新按钮触发datagrid里面的的验证事件,而不触发datagrid外面的验证事件
- c#字符串大小写转换
- 使用SqlBulkCopy时,无法将TXT中的时间字符串转换为SQL中的Datetime类型
- 郁闷~为什么重装vs2003 后,打开,抱错 : DTE.OLB 找不到?点确定后程序就退出了,是怎么回事啊?
- 如何获得访问者系统使用的语言
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 急急急!!!!!在线等!.net平台C#开发,数据库为Oracle 10g,程序操作成功,却不定时总报
我 把 255 改成 1024试一下
StringBuilder temp = new StringBuilder(1024);
int i = GetPrivateProfileString(Section,Key,"error",temp,1024,this.Path);
[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 INIClass(string INIPath)
{
inipath = INIPath;
}
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.inipath);
}
public string IniReadValue(string Section,string Key)
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);
return temp.ToString();
}
public bool ExistINIFile()
{
return File.Exists(inipath);
}
http://topic.csdn.net/u/20090406/12/90712efe-bd44-49bc-9a2a-b0d1790cbb6c.html
很可能不是啊.解决读写INI文件,写到静态类中,不用实例化,一层方法就能解决问题。
这样比较简洁,可读性、可维护要好。
public static class IniFile
{
//声明读写INI文件的API函数
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32")]
public static extern long WritePrivateProfileString(string section, string key, string val, string filePath); static string path = Application.StartupPath + "\\out1.ini";
//读 INI
public static string GetSqlString()
{
if (System.IO.File.Exists(path) == false) return ""; StringBuilder temp1 = new StringBuilder(255);
StringBuilder temp2 = new StringBuilder(255);
StringBuilder temp3 = new StringBuilder(255);
StringBuilder temp4 = new StringBuilder(255); int i1 = GetPrivateProfileString("Database", "server", "", temp1, 255, path);
int i2 = GetPrivateProfileString("Database", "uid", "", temp2, 255, path);
int i3 = GetPrivateProfileString("Database", "pwd", "", temp3, 255, path);
int i4 = GetPrivateProfileString("Database", "database", "", temp4, 255, path); StringBuilder strSql = new StringBuilder(255);
strSql.Append("server =" + temp1.ToString().Trim());
strSql.Append(";uid = " + temp2.ToString().Trim());
strSql.Append(";pwd =" + temp3.ToString().Trim());
strSql.Append(";database =" + temp4.ToString().Trim());
return strSql.ToString();
} // 写 INI
public static void WriteIni(string server, string uid, string pwd, string database)
{
WritePrivateProfileString("Database", "server", server, path);
WritePrivateProfileString("Database", "uid", uid, path);
WritePrivateProfileString("Database", "pwd", pwd, path);
WritePrivateProfileString("Database", "database", database, path);
}
}
声明一个你的数据库信息的类
public class MyDatabaseInfo
{
public string server;
public string database;
public string uid;
public string pwd; }在程序中声明一个实例
MyDatabaseInfo dbInfo = new MyDatabaseInfo();
dbInfo.server = "....";
dbInfo.database= "....";
dbInfo.uid = "....";
dbInfo.pwd = "...."; //把对象dbInfo保存到xml中
public void SaveToXml(string path, MyDatabaseInfo dbInfo)
{
XmlSerializer xs = new XmlSerializer(typeof(MyDatabaseInfo));
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);
xs.Serialize(fs, dbInfo);
fs.Close();
}
//把对象从xml中读出来
public MyDatabaseInfo ReadFromXml(string path)
{
XmlSerializer xs = new XmlSerializer(typeof(MyDatabaseInfo));
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
MyDatabaseInfo dbInfo = (MyDatabaseInfo)xs.Deserialize(fs);
fs.Close();
return dbInfo;
}具体的根据需要你在整理下。
/// <summary>
/// 验证文件是否存在
/// </summary>
/// <returns>布尔值</returns>
public bool ExistINIFile()
{
return File.Exists(inipath);
}然后在这里使用,看看文件存在吗。
public static string MyDatainfo()
{
string sPath;
string ServerName, userId, sPwd, DataName; sPath = GetPath();
IniFile ini = new IniFile(sPath);
if (ini.ExistINIFile())
{ ServerName = ini.IniReadValue("Database", "server");
userId = ini.IniReadValue("Database", "uid");
sPwd = ini.IniReadValue("Database", "pwd");
DataName = ini.IniReadValue("Database", "database");
string strSql = "server =" + ServerName + ";uid =" + userId + ";pwd =" + sPwd + ";database =" + DataName;
return strSql;
}
}