如果缺少该值,INI Reader崩溃

时间:2019-04-03 14:38:35

标签: c# wpf

我正在尝试使用此C#INI阅读器。

https://gist.github.com/Sn0wCrack/5891612


效果很好,我能写

INIFile inif = new INIFile(@"C:\Path\To\example.ini");

inif.Write("Example Section", "Example_Key_Text", (vm.Example_Key_Text));

阅读

string example = inif.Read("Example Section", "Example_Key_Text");

INI文件输出:

[Example Section]
Example_Key_Text=This is a test.

问题

读取时,如果[Section]文件中缺少Keyini,程序将崩溃。

我相信它在GetPrivateProfileString()上崩溃了。

如果我为新控件添加了read,并且程序使用了缺少值的旧ini文件,则会发生这种情况。我希望它仍然可以使用旧文件,并且忽略该值是否丢失而不是崩溃。

我可以使用try/catch,但是我不知道是否要在每个read上这样做,我从文件中大约有100个。


INI Reader

public partial class INIFile
{
    public string path { get; private set; }

    [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 def, StringBuilder retVal, int size, string filePath);

    public INIFile(string INIPath)
    {
        path = INIPath;
    }
    public void Write(string Section, string Key, string Value)
    {
        WritePrivateProfileString(Section, Key, Value, this.path);
    }

    public string Read(string Section, string Key)
    {
        StringBuilder temp = new StringBuilder(255);
        int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path);
        return temp.ToString();
    }
}

0 个答案:

没有答案