写的软件在中文或英文路径下运行没有问题,但是在韩文或者其他文字路径下就无法运行,最后发现是.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文件
///
/// 段,格式[]
/// 键
///
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
{
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);
}
}