这两种cfg和INI格式的文件操作方式类似,我就以cfg文件为例
文件结构如下
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[shortcut]
from=-3
activation=linear
[yolo]
mask=6,7,8
anchors=10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
classes=2
num=9
jitter=.3
ignore_thresh=.7
truth_thresh=1
random=1
每一个[名称]相当于是一个节点,也可以说是Section对象,跟xml一样操作灵活。
首先 using SharpConfig;在项目中Nuget里搜索安装
下面做了一个修改的cfg文件的例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using SharpConfig;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string cfgfile = @"C:\Users\Administrator\Desktop\TEST.cfg";
///获取cfg文件内容
Configuration config = Configuration.LoadFromFile(cfgfile);
string str = "21.1864,27.9741, 29.2781,48.4374, 46.0249,38.9342, 45.4448,63.0540, 65.5580,56.7747, 49.8878,85.4522, 57.3819,113.8931, 100.0110,74.2307, 150.1680,121.6222";
foreach (Section item in config)
{
if (item.Name== "yolo")//获取yolo节点
{
//yolo节点某一个名称的value修改
item["anchors"].StringValue = str.Replace(" ", "");
}
}
config.SaveToFile(cfgfile, Encoding.ASCII);//保存
}
}
}
注意的是:替换的字符串,不要有空格,防止出错加上它Replace(" ", ""),除去字符串中的所有空格;
不加的话有可能替换的地方value出现引号包裹,我在开发过程中遇到这个情况,找了半天是空格导致的。
有误:anchors=“21.1864,27.9741,29.2781,48.4374,46.0249,38.9342,45.4448,63.0540,65.5580,56.7747,49.8878,85.4522,57.3819,113.8931,100.0110,74.2307,150.1680,121.6222”
正确:anchors=21.1864,27.9741,29.2781,48.4374,46.0249,38.9342,45.4448,63.0540,65.5580,56.7747,49.8878,85.4522,57.3819,113.8931,100.0110,74.2307,150.1680,121.6222
修改后的文件
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[shortcut]
from=-3
activation=linear
[yolo]
mask=6,7,8
anchors=21.1864,27.9741,29.2781,48.4374,46.0249,38.9342,45.4448,63.0540,65.5580,56.7747,49.8878,85.4522,57.3819,113.8931,100.0110,74.2307,150.1680,121.6222
classes=2
num=9
jitter=.3
ignore_thresh=.7
truth_thresh=1
random=1