对我来说这是一个令人费解的问题。我知道大多数这些类型的错误来自于尝试访问数组范围之外的东西(错误也是如此),但它并没有在这里加起来。以下是错误:
System.IndexOutOfRangeException:索引超出了范围 Program.cs中的MyProgram.Program.Main(String [] args)中的数组:第47行
这里唯一的问题是我的程序的第一行是第47行(它只定义了一个MailAddress
变量)。如果我注释掉该行,则第二行错误,即定义SMTP客户端。直到昨天,这个程序在过去两个月左右每天早上都有。在过渡期间,我没有更改代码,重新编译或对其做任何事情(尽管从那以后我已经尝试了一些调试,以便在它崩溃后弄明白)。
程序本身非常简单,只需使用System.Net.Mail
和System.IO
查看一些文本文件并发送内容的电子邮件。
我的问题,虽然我知道不建议在没有任何代码的情况下发帖,但这是一个普遍的问题。既然我知道它适用于另一个系统(我只是在那里运行),我的问题是什么可能导致这种行为/错误?
我尝试的事情:
这里有什么明显的东西我不在吗?
编辑:
static void Main(string[] args)
{
MailAddress sendEmailFromNice = new MailAddress("email@email.com", "Nice Email Name");
SmtpClient client = new SmtpClient();
client.Port = smtpport;
client.Host = smtphost;
client.EnableSsl = true;
client.Timeout = 25000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(sendEmailFrom, sendEmailFromPass);
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
// gotten list
List<int> alreadyGottenList = new List<int>();
string line = null;
string[] lineSplit = null;
int currentInt = 0;
if (File.Exists(storedIntList))
{
using (var reader = new StreamReader(storedIntList))
{
line = null;
while ((line = reader.ReadLine()) != null)
{
currentInt = int.Parse(line.Trim());
alreadyGottenList.Add(currentInt);
currentInt = 0;
}
}
}
List<int> newIntsToGet = new List<int>();
if (File.Exists(LogFile))
{
using (var readerPrimaryToday = new StreamReader(LogFile))
{
while ((line = readerPrimaryToday.ReadLine()) != null)
{
lineSplit = line.Split(',');
if (lineSplit[0].ToString() != "header")
{
currentInt = int.Parse(lineSplit[8].ToString().Trim());
}
if (!alreadyGottenList.Contains(currentInt))
{
newIntsToGet.Add(currentInt);
alreadyGottenList.Add(currentInt);
File.AppendAllText(storedIntList, currentInt.ToString() + Environment.NewLine);
}
}
}
}
string emailBody = "BodyHere ";
string emailSubject = "Subject here";
foreach (var thisVar in newIntsToGet)
{
emailBody = emailBody + thisVar.ToString() + Environment.NewLine;
}
MailMessage messageToSend = new MailMessage();
messageToSend.Subject = emailSubject;
messageToSend.Body = emailBody;
messageToSend.IsBodyHtml = false;
messageToSend.To.Add(sendEmailTo);
client.Send(messageToSend);
}
它只有一个包含数字的.csv文件,然后检查文本文件中是否有我尚未见过的数字。如果找到,则将其添加到电子邮件和存储的.csv文件中。
答案 0 :(得分:2)
我不确定,但看看你的代码,IndexOutOfArrayException可能与以下几行有关:
func goToPage(goto storyBoardId: String, ofType typeUIViewController: UIViewController.Type) -> UIViewController {
let storyBoard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let newPage = storyBoard.instantiateViewController(withIdentifier: storyBoardId) as! typeUIViewController // Error: use of undeclared type 'typeUIViewController'
self.present(newPage, animated: true, completion: nil)
return newPage
}
您似乎没有检查lineSplit中是否有任何返回。例如,如果您读取的LogFile以某种方式被修改并且现在包含一个新行,则会导致lineSplit [0]出现问题 - 或者如果日志被修改,现在您没有第9列的值lineSplit [8]