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



我是 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。此外,每当我尝试关闭消息框时,它只会再次显示它。

所以我决定这样做:

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
}

但即使文件是由程序创建的,它仍然会显示它。

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

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

if (beginningOfData.All(line => line.ToLower().Contains("indicator")))
{
string temporary = string.Empty;
foreach (string line in beginningOfData)
{
temporary = line.Substring(9);
//Goes through the rest of the file
//Converts data to control value and adds it
}
}
else
{
System.Windows.Forms.MessageBox.Show("Can't load data.");   
}
Contains

区分大小写。 试试这个来评估:

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

我这样做了,它适用于我的应用程序

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");
}
}
}  

相关内容

  • 没有找到相关文章

最新更新