我正在使用正则表达式来尝试匹配INI文件中的节块.我正在使用正则表达式手册中给出的配方,但它似乎对我不起作用.
这是我正在使用的代码:
final BufferedReader in = new BufferedReader(
new FileReader(file));
String s;
String s2 = "";
while((s = in.readLine())!= null)
s2 += s + System.getProperty("line.separator");
in.close();
final String regex = "^\\[[^\\]\r\n]+](?:\r?\n(?:[^\r\n].*)?)*";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
String sectionBlock = null;
final Matcher regexMatcher = pattern.matcher(s2);
if (regexMatcher.find()) {
sectionBlock = regexMatcher.group();
}
Run Code Online (Sandbox Code Playgroud)
以下是我的输入文件的内容:
[Section 2]
Key 2.0=Value 2.0
Key 2.2=Value 2.2
Key 2.1=Value 2.1
[Section 1]
Key 1.1=Value 1.1
Key 1.0=Value 1.0
Key 1.2=Value 1.2
[Section 0] …
Run Code Online (Sandbox Code Playgroud) 在使用旧的INI文件多年后,我们最近开始使用XML文件.
我的同事发现了一些使用System.Xml.XmlDocument.Save的CodeProject示例代码.当两个程序试图同时写入同一个文件时,我们会遇到异常.
System.IO.IOException:进程无法访问文件'C:\ Test.xml',因为它正由另一个进程使用.
事后看来这很明显,但我们没有预料到它,因为通过Win32 API访问INI文件没有这个限制.我假设Win32调用完成了一些仲裁,它们的工作级别高于XmlDocument.Save方法.
我希望.Net库中某处有更高级别的XML例程,它们与Win32函数类似,但不知道从哪里开始查找.
或者我们可以设置文件访问权限以允许多个程序写入同一个文件?
时间很短(就像几乎所有软件项目一样),如果我们无法快速找到解决方案,我们就必须抓住我们的鼻子并回到INI文件中.
我想为我的delphi程序创建一个重置按钮.在我的程序中,有时会有一些Ini.pathexe中创建的文件.我现在要做的是创建一个按钮或标签,让我点击它以及何时点击它.它删除了我的pathexe中的所有.Ini文件
我怎么能这样做?
另外我想知道如何做一点'你确定吗?' 弹出,但这是一个小细节.
我有一个 .ini 文件,如下所示:
[playlist]
numberofentries=2
File1=http://87.230.82.17:80
Title1=(#1 - 365/1400) Example Title
Length1=-1
File2=http://87.230.56.25:80
Title2=(#2 - 370/1400) Example Title
Length1=-1
Version=2
Run Code Online (Sandbox Code Playgroud)
我想知道如何以编程方式读取此文件,在文件和标题值周围添加引号,然后再次在 PHP 中保存此文件。
我将非常感谢任何帮助。
如何将INI文件中的条目添加到哈希表?
我的INI文件看起来像这样......
[Channel 0]
Input = 0
Output = 0
CirUpdateRate = 10000 Hz
CirSourceFile = ..\..\MAT\mymodel.mat
CirControlFile = mymodel_0_S1_T4.sim
[Channel 1]
Input = 1
Output = 1
CirUpdateRate = 10000 Hz
CirSourceFile = ..\..\MAT\mymodel.mat
CirControlFile = mymodel_1_S1_T4.sim
Run Code Online (Sandbox Code Playgroud)
如何将每个变量和值插入哈希表.
我将能够区分或访问变量输入下[通道0]和输入在`[ 频道1 ]?
我找到了一些与编辑ini文件的某个部分完美配合的代码,但它只选择了我要编辑的第一行实例.我知道我可以手动输入我想要开始编辑的代码中的所有索引,但是知道事情如何随着时间的推移而改变,可能会对ini文件进行更改,然后索引也会发生变化.有人能解释一下这个问题吗?
const string FileName = "File.ini";
string file= File.ReadAllText(FileName);
const string Pattern = @"pattern = (?<Number>)";
Match match = Regex.Match(config, Pattern, RegexOptions.IgnoreCase);
if (match.Success)
{
int index = match.Groups["Number"].Index;
string newText= **********;
file = file.Remove(index, 21);
file = file.Insert(index, newText);
File.WriteAllText(FileName, file);
}
Run Code Online (Sandbox Code Playgroud) 我在windows目录的win.ini文件中放置了一个自定义条目,在自定义[Login]部分下名为LoginCount,并在每次加载主视图时递增.在Form Create事件中,我访问win.ini并检查其值,如果达到1000,我会显示一条消息.但是发生了一件非常奇怪的事情.达到1000后,我手动将其值设置为0.但它仍然显示1000.我检查了路径,以防应用程序引用系统中的某个其他win.ini文件,但它是C:\ Windows\win.ini .这是代码:
procedure TfMain.FormCreate(Sender: TObject);
var
winIni: TIniFile;
windir_buf: array [0 .. 144] of Char;
WINDIR: string;
loginCount: integer;
begin
GetWindowsDirectory(windir_buf, sizeof(windir_buf));
WINDIR := StrPas(windir_buf) + '\';
ShowMessage(WINDIR+'win.ini');//Shows C:\Windows\win.ini
winIni := TIniFile.Create(WINDIR + 'Win.ini');
loginCount := winIni.ReadInteger('Login', 'LoginCount', 1);
ShowMessage(IntToStr(loginCount));//Shows 1000 although it's 0 in the actual file.
end;
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
最近,我遇到了一个小问题,在尝试读取.ini文件时会导致访问冲突.
我的问题是,我可以在同一个程序中加载多个.ini文件(例如settings.ini和data.ini)吗?例如,我有两个ini文件,我写入并读取.
这是一个缩短的proc,它写入数据:
//writing to file uninstall.ini
try
ini := TIniFile.Create(edPath.Text + '\Uninstall.ini');
ini.WriteString('Uninstall', 'qfProgramName', Label4.Caption);
ini.WriteString('Uninstall', 'qfUninstPath', edPath.Text);
finally
ini.Free;
end;
Run Code Online (Sandbox Code Playgroud)
然后,有这个代码(在相同的程序中)
configini := configini.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
sectionsCount := getMaxSectionIndex(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
startmenuLoc := GetProperDir(_STARTMENU);
desktopLoc := GetProperDir(_DESKTOP);
for I := 1 to sectionsCount do begin
currentSection := 'qfShortcut_' + IntToStr(I);
shortcutFile := configini.ReadString(currentSection, 'qfShTarget', '');
shortcutDesc := configini.ReadString(currentSection, 'qfShDescription', '');
shortcutFullPath := installPath + '\' + shortcutFile;
shortcutDest := configini.ReadString(currentSection, 'qfShPath', '');
displayName := configini.ReadString(currentSection, 'qfDisplayName', '');
showmessage(startmenuLoc …
Run Code Online (Sandbox Code Playgroud) 我目前在一个学区工作,我们正在尝试为我们的工具包创建一个 C# exe。我们是 C# 新手,正在学习它,但由于它的灵活性而希望使用它。C# 工具包将用于自动设置新的或重新映像的计算机,其中包含我们选择的设置、程序、Regedit 更改和首选项。
我们有一个在 powershell 中硬编码的工作版本,我们正在将其转移到 c#。
我们当前面临的问题是如何使用设置/配置文件(例如 ini 或 xml)从函数和变量中提取通用信息并填充它们。这样我们就可以创建我们可以选择并运行的通用配置文件。例如:
[Server]
IP=172.1.0.10
Port=9999
PathToCSV=\\c:\Files.csv
[Client]
RestartComputerAfterScript=1
Install.Browser.Firefox=1
Install.Browser.Chrome=1
Install.Java=0
Install.PrinterLogic=1
SysConfig.TempLoc=d:\TEMP
Run Code Online (Sandbox Code Playgroud)
该 ini 文件将从我们的 C# GUI 中选择并填充:
我们最终还将尝试传递其他变量,例如注册表路径和值等。
有人对我们如何使用 INI 有建议,或者对创建构建配置文件有更好的建议吗?
我研究过的资源:INI: https ://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C
我正在使用自定义的INI解析器,其参数是表单名称,父窗口小部件.语法如下所示:
int width = w->findchild("form_name","section_to_be_accessed_name").toInt();
Run Code Online (Sandbox Code Playgroud)
我的语法可能有点不对,因为我现在没有代码.我想添加INI文件第2页中提到的一些标签.这些图像的属性在ini文件本身中提到.即使是绝对的道路等.
我尝试了多种组合,但它不起作用.任何人都可以给我一个相同的语法吗?这里的回报值应该是多少?一个标签,我已经在Qt设计器中创建了标签.让我们说吧label1
.但是有很多标签.请告诉我.
这是我写入ini文件的代码.
Ini := TIniFile.Create(ChangeFileExt('StudentALevelMathsTracker.exe','.ini')) ;
try
Ini.WriteString('Settings', 'FilePath', edtFilePath.text);
Ini.UpdateFile;
finally
Ini.Free;
end;
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个时,我得到一个错误说
项目ALevelMathsTracker.exe引发了异常类EIniFileException,并显示消息"无法写入studentALevelMathsTracker.ini"
这是我在网络上的问题还是我的代码?
因此,我决定承担一种新的爱好,因为我无力建造PC,到目前为止,我还是试图创建一个基于控制台的简单程序,该程序从ini文件中读取信息,但是似乎根本无法读取它,并且而是仅输出默认值。和随机整数。
char* ReadINI(const char* sSection, const char* sSub, const char* sDefaultValue)
{
char* sResult = new char[255];
memset(szResult, 0x00, 255);
GetPrivateProfileString( sSection, sSub, sDefaultValue, sResult, 255, ".\\config.ini");
return sResult;
}
int s_width = (int)ReadINI("CONFIGURATION", "WIN_WIDTH", 0);
int s_height = (int)ReadINI("CONFIGURATION", "WIN_HEIGHT", 0);
const char* value = ReadINI("CONFIGURATION", "WIN_NAME", "null");
Run Code Online (Sandbox Code Playgroud)
这是我作为调试方式的输出,因此用户知道该应用程序已正确读取那里的设置。
std::cout << "Width: " << s_width << "\n"; // Displays random integer
std::cout << "Height: " << s_height << "\n"; // Displays random integer
std::cout << "Name: " << value …
Run Code Online (Sandbox Code Playgroud) 如何.ini
在不消耗大量CPU时间的情况下读取线程中的文件?该线程将在运行时运行,这意味着true而没有延迟.
搜索.ini上的值的代码是:
var
Leitura : TIniFile;
begin
Result := False;
Leitura := TIniFile.Create('File.ini');
if Leitura.ValueExists('KEY', ValueToSearch) then Result := True;
Leitura.Free;
Run Code Online (Sandbox Code Playgroud)
但由于此函数在无限循环中运行,因此消耗CPU时间,我需要解决这个问题.