因此,我尝试使用一个配置文件,该文件在每次打开程序时都会包含常用数据,在本示例中,该名称将出现在第一行。 问题是我要确保存储内容(名称= line1,dob = line2)的每一行都不能为空。但这似乎并没有注意到配置为空。
Console.WriteLine("Finding config");
var folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\imsammstbot";
var filePath = folderPath + "\\tbot.config";
if (File.Exists(filePath))
{
Console.WriteLine("Config loading");
Console.WriteLine(filePath);
string[] cfgdata = File.ReadAllLines(filePath);
Console.WriteLine(cfgdata);
int linenum = 0;
foreach (string line in cfgdata)
{
if (String.IsNullOrEmpty(line) || String.IsNullOrWhiteSpace(line))
{
Console.WriteLine("Config empty\nGenerating new config file");
newcfg();
}
if (++linenum == 1) { string name = line; }
}
}
else
{
Console.WriteLine("No config found\nGenerating new config file");
newcfg();
}
答案 0 :(得分:1)
您的foreach
仅在至少有1行的情况下运行。要在 0行时创建新的配置,您需要对此执行显式检查和相应的操作:
string[] cfgdata = File.ReadAllLines(filePath);
if (cfgdata.Length == 0) newcfg();
之后,您可能还需要提供进一步的处理,例如如果要使用新创建的配置,则还需要阅读新创建的文件:
string[] cfgdata = File.ReadAllLines(filePath);
if (cfgdata.Length == 0)
{
newcfg();
cfgdata = File.ReadAllLines(filePath);
if (cfgdata.Length == 0)
{
throw new Exception("Config file is empty, despite just creating a new one.")
}
}
foreach (string line in cfgdata)
{
// ...
}