奇怪的INI格式用C#编写。无法读取或写入

时间:2014-03-10 16:54:32

标签: c# wpf ini

过去几个月我在这个网站上学到了很多东西。 我虽然在这里遇到了一个小洞。 我正在尝试编写或更改特定INI文件中的值。

我正在使用由StackOverflow Guru制作的名为“Danny Beckett”的自定义类,我非常喜欢和理解它。现在已经使用了一段时间没有问题。在编写和阅读INI文件时,对大多数事情都能很好地工作......直到现在。

这是他谈论它的地方。 Reading/writing an INI file

这是我用来读写INI的类。

    using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;

// Change this to match your program's normal namespace
namespace MyProg
{
    class IniFile   // revision 10
    {
        string Path;
        string EXE = Assembly.GetExecutingAssembly().GetName().Name;

        [DllImport("kernel32")]
        static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath);

        [DllImport("kernel32")]
        static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath);

        public IniFile(string IniPath = null)
        {
            Path = new FileInfo(IniPath ?? EXE + ".ini").FullName.ToString();
        }

        public string Read(string Key, string Section = null)
        {
            var RetVal = new StringBuilder(255);
            GetPrivateProfileString(Section ?? EXE, Key, "", RetVal, 255, Path);
            return RetVal.ToString();
        }

        public void Write(string Key, string Value, string Section = null)
        {
            WritePrivateProfileString(Section ?? EXE, Key, Value, Path);
        }

        public void DeleteKey(string Key, string Section = null)
        {
            Write(Key, null, Section ?? EXE);
        }

        public void DeleteSection(string Section = null)
        {
            Write(null, null, Section ?? EXE);
        }

        public bool KeyExists(string Key, string Section = null)
        {
            return Read(Key, Section).Length > 0;
        }
    }
}

这是我用来实际进行更改的代码....

var MyIni = new IniFile("Settings");
var SelectedPdata = MyIni.Read("SelectedPdata");
var SelectedSQL = MyIni.Read("SelectedSQL");
var SetupIniLocation = SelectedPdata + "\\Setup\\Sidexis\\Setup.ini";
var SetupIni = new IniFile(SetupIniLocation)  
SetupIni.DeleteKey("VZPDATA", "CLIENT");
SetupIni.Write("VZPDATA", SelectedPdata, "CLIENT");
SetupIni.DeleteKey("COMBOSQL", "CLIENT");
SetupIni.Write("COMBOSQL", SelectedSQL, "CLIENT");

什么是: 它从我的设置INI文件中读取两个参数,并将它们传递给变量。然后使用这些变量将它们写入setup.ini文件。

目标“Setup.ini”

[CLIENT]
Aufruf="msiexec.exe /i Sidexis.MSI VZSIDEXIS="C:\Sidexis\" SQLDIALOGTYPE=1 LANGUAGE=1033 PROPDSN="PDATA_SQLEXPRESS" PROPDBO="" INSTALLATIONTYPE=FULL SERIALNUMBER=6000000837 VZPDATA="\\JONMER-WIN7X64\PDATA\" COMBOSQL="JONMER-WIN7X64\PDATA_SQLEXPRESS" COMPANYNAME="" NEEDEDDISKSPACE=104857600 MASTERCLIENT=TRUE /QB!"

我需要修改的参数是:COMBOSQL和VZPDATA。

它可以修改它......但它只是把它们放在底部。 我确定它与格式化有关,因为如果我将其格式化为常规INI文件。 (每个参数在它自己的行上)它工作正常....

0 个答案:

没有答案