未检测到空/空行

时间:2019-03-17 21:46:37

标签: c#

因此,我尝试使用一个配置文件,该文件在每次打开程序时都会包含常用数据,在本示例中,该名称将出现在第一行。 问题是我要确保存储内容(名称= 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();
}

1 个答案:

答案 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)
{
    // ...
}