C# - 由于打开文件,自动更新应用程序失败。 DLLimports

时间:2013-06-13 16:54:43

标签: c# winforms dllimport

我上过这堂课:

    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导入使文件保持打开状态?

看到我实际上没有得到文件的句柄,我如何检查它是否打开/关闭?或者文件在读/写后自动关闭?在哪种情况下,我该怎么办?可能处理对象?

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要检查该文件是打开还是关闭,我认为这已在此处得到解答Closing a file after File.Create

我会使用该类来检查文件是否打开,并尝试使用close方法。

答案 1 :(得分:0)

修正了它。由于某种原因,外部函数没有关闭文件。我在上面的类中扩展了IDisposable,并在我读完所有设置后手动处理它。我真的很震惊,这些功能本身并没有这样做。没关系,全部排序。干杯的帮助和提示!