Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向用户显示无法将文件加载到程序c的消息#_C#_Io_Messagebox_Streamreader_Windows Applications - Fatal编程技术网

C# 向用户显示无法将文件加载到程序c的消息#

C# 向用户显示无法将文件加载到程序c的消息#,c#,io,messagebox,streamreader,windows-applications,C#,Io,Messagebox,Streamreader,Windows Applications,我不熟悉System.IO 我有一个应用程序,它从web上获取Json文件,只获取部分数据以显示在Windows应用程序窗体的控件上。 该表单允许用户将数据保存为新文件并加载文件,前提是该文件包含我在保存文件时添加的“指示符”,该指示符告诉程序它是由我的程序保存的 一切正常 每当将不包含该指示符的文件加载到程序中时,它不会显示任何我希望它执行的操作,但我还希望弹出一个Messagebox.show(),让用户知道为什么值为空以及为什么什么都没有发生 if(openFile.ShowDialog(

我不熟悉System.IO

我有一个应用程序,它从web上获取Json文件,只获取部分数据以显示在Windows应用程序窗体的控件上。 该表单允许用户将数据保存为新文件并加载文件,前提是该文件包含我在保存文件时添加的“指示符”,该指示符告诉程序它是由我的程序保存的

一切正常

每当将不包含该指示符的文件加载到程序中时,它不会显示任何我希望它执行的操作,但我还希望弹出一个Messagebox.show(),让用户知道为什么值为空以及为什么什么都没有发生

if(openFile.ShowDialog() == DialogResult.OK)
{
    string dataLine = string.Empty;
    using (StreamReader read = new StreamReader(File.OpenRead(openFile.FileName)))
    {

        dataLine = read.ReadToEnd();
        string[] beginningOfData = dataLine.Split(',');
        string temporary = string.Empty;
        foreach (string line in beginningOfData)
        {
             //Indicator
             if(line.Contains("Indicator")
             {
                temporary = line.substring(9);
                //Goes through the rest of the file
                //Converts data to control value and adds it
             }
             else
             {
                //Where I tried to display the message box       
             }
        }
    }

}
这是我尝试过的,但也没有达到我想要的效果

else
{
    MessageBox.Show("Can't load data.");      
}
即使它读取到指示器在那里并在相应的控件中显示数据,它仍然会显示MessageBox。无论何时我试图关闭MessageBox,它都会再次显示

所以我决定改为:

else if(!line.contains("Indicator"))
{ 
    MessageBox.Show("Can't load data.");
    break;
}
也就是这样:

else
{
    if(!line.contains("Indicator")) 
    { 
        MessageBox.Show("Can't load data.");
        break;
    }
}
我还试着通过这样做使它更具体

if(line.contains("Indicator") == false)
{
   //Code here
}
但即使文件是由程序创建的,它仍会显示它


休息;确实阻止了消息框再次出现,但我只希望消息框在不正确的文本文件(不包含指示器)时显示,并允许我关闭消息框重试。

Contains
区分大小写。尝试以下方法进行评估:

line.IndexOf("Indicator", StringComparison.InvariantCultureIgnoreCase) >= 0

您可以将
foreach
封装到if语句中,该语句将使用一些LINQ代码来确定是否所有行都包含“indicator”:


我这样做了,它为我的申请工作

if(openFile.ShowDialog() == DialogResult.OK)
{
    string dataLine = string.Empty;
    using (StreamReader read = new StreamReader(File.OpenRead(openFile.FileName)))
    {
        //Changed happened here

        dataLine = read.ReadToEnd();
        string[] beginningOfData = dataLine.Split(',');
        string temporary = string.Empty;

        if(beginningOfData.Contains("Indicator"))
        {   
           temporary = dataLine.Substring(9);
           foreach(string realData in beginningOfData)
           {
             //Goes through file
           }
        }
        else
        {
          MessageBox.Show("Can't load data");
        }
    }
}  

您希望该文件包含一行,其中包含值
指示符
,还是希望该文件所有行中只包含一个
指示符
值?第一个。当我打开创建的文本文件时,它显示如下:(只是一个示例)Indicator,Data:1,Data2:word,这是否被认为是一个有效的文件:Line1:“someText”Line2:“Indicator”…不,我在正在保存的每个新文件的开头硬编码了“Indicator”。与此类似:“Indicator”+,“+”Data:“+control.value+”,“+数据:“+control.value+”,”等等。它只是一个数据字符串,但总是有“指示符”“在开始时,line=>line中的行是否声明了一个新变量?否则我就不明白它是从哪里来的。@初学者编码器这被称为lambda表达式,它内部使用
foreach
循环运行,所以这基本上就是
这里的
foreach(行中的var行)
。我可以包括一个foreach示例来说明它是如何工作的。我有点遵循了您试图做的事情,但没有使用lambda并使其工作。谢谢你的点灯时刻!这就是我在你的问题下的评论中提出的问题。我想我不明白你的意思,我得到的印象是,这段代码不会工作,因为不是每一行都必须包含“Indicator”,这只需要一行就可以包含它:)。
if(openFile.ShowDialog() == DialogResult.OK)
{
    string dataLine = string.Empty;
    using (StreamReader read = new StreamReader(File.OpenRead(openFile.FileName)))
    {
        //Changed happened here

        dataLine = read.ReadToEnd();
        string[] beginningOfData = dataLine.Split(',');
        string temporary = string.Empty;

        if(beginningOfData.Contains("Indicator"))
        {   
           temporary = dataLine.Substring(9);
           foreach(string realData in beginningOfData)
           {
             //Goes through file
           }
        }
        else
        {
          MessageBox.Show("Can't load data");
        }
    }
}