這是我的一個令人費解的問題。我知道大多數這些類型的錯誤都是來自嘗試訪問數組邊界之外的東西(並且錯誤也是這樣),但它不會在這裏累加起來。以下是該錯誤:控制檯應用程序中的System.IndexOutOfRangeException - 基於可能的系統
System.IndexOutOfRangeException: Index was outside the bounds of the array at MyProgram.Program.Main(String[] args) in Program.cs:line 47
這裏是我的程序的第一行是在第47行(這只是限定MailAddress
變量)唯一的問題。如果我註釋掉該行,則會發現第二行錯誤,它定義了SMTP客戶端。直到昨天,這個程序在過去兩個月左右每天早上都在運行。在過渡期間,我沒有改變代碼,重新編譯或做了任何事情(儘管從那以後我已經嘗試過一些調試,以便在破壞後找出它)。
該程序本身非常簡單,它只是使用System.Net.Mail
和System.IO
來查看一些文本文件併發送內容的電子郵件。
我的問題,雖然我知道不建議發佈沒有任何代碼,是一個普遍的問題。因爲我知道它在另一個系統上工作(我只是在那裏運行它),我的問題是什麼可能導致此行爲/錯誤?
事情我已經嘗試:
- 修復的.NET Framework 4.5.2(關於該程序的目標框架是4.5)。
- 嘗試重新編譯x64(之前是x86)。
- 重新啓動(顯然,只是想指出)。
- 禁用Windows防火牆進行測試(不太可能是因爲錯誤)。
這裏有什麼明顯的我失蹤了嗎?
編輯:
static void Main(string[] args)
{
MailAddress sendEmailFromNice = new MailAddress("[email protected]", "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文件中。
告訴我們代碼 – Baksteen
請分享一些代碼來通過。 –
什麼是索引,以及該數組有多長...... –