我上过这堂课:
public class CIni
{
public string 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 CIni(string INIPath)
{
path = INIPath;
}
public void IniWriteValue(string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, this.path);
}
public string IniReadValue(string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp,
255, this.path);
// finally return the value found
return temp.ToString();
}
}
我用它来读取.ini文件中的设置。我也写了一个自动更新程序。一切正常,直到自动更新程序尝试重写.ini文件(使用新设置等)。我无法弄清楚为什么,我唯一能想到的是,由于某种原因,dll导入使文件保持打开状态?
看到我实际上没有得到文件的句柄,我如何检查它是否打开/关闭?或者文件在读/写后自动关闭?在哪种情况下,我该怎么办?可能处理对象?
提前致谢!
答案 0 :(得分:0)
如果我理解正确,您需要检查该文件是打开还是关闭,我认为这已在此处得到解答Closing a file after File.Create
我会使用该类来检查文件是否打开,并尝试使用close方法。
答案 1 :(得分:0)
修正了它。由于某种原因,外部函数没有关闭文件。我在上面的类中扩展了IDisposable,并在我读完所有设置后手动处理它。我真的很震惊,这些功能本身并没有这样做。没关系,全部排序。干杯的帮助和提示!