过去几个月我在这个网站上学到了很多东西。 我虽然在这里遇到了一个小洞。 我正在尝试编写或更改特定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文件。 (每个参数在它自己的行上)它工作正常....