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