2017-10-16 11 views
1

これは私のための困惑ものです。私はこれらのタイプのエラーのほとんどが配列の境界の外にあるものにアクセスしようとしていることを知っています(エラーもそう言いますが)。以下は、エラーです:ここコンソールアプリケーションでSystem.IndexOutOfRangeException - おそらくシステムベース

System.IndexOutOfRangeException: Index was outside the bounds of the array at MyProgram.Program.Main(String[] args) in Program.cs:line 47

唯一の問題は、私のプログラムの最初の行は(ちょうどMailAddress変数を定義する)ライン47であるということで。その行をコメントアウトすると、2行目のエラーがSMTPクライアントを定義しています。昨日まで、この同じプログラムは過去2ヶ月ほど毎朝走った。私は、コードを変更したり、再コンパイルしたり、暫定的に何かをやったりしていません(しかし、それ以来、壊れた後にいくつかのデバッグを試みました)。

プログラム自体はかなりシンプルです。ちょうどSystem.Net.MailSystem.IOを使っていくつかのテキストファイルを見て、その内容の電子メールを送ります。

私の質問は、コードなしで投稿することはお勧めできませんが、一般的な質問です。私はそれが別のシステムで動作していることを知っているので(私はそこでそれを実行しました)、私の質問はこの動作/エラーを引き起こす可能性がありますか?私が試した

もの:

  • 修理の.NET Framework 4.5.2(プログラム上のターゲットFrameworkが4.5です)。
  • x64用の再コンパイルを試みました(以前はx86でした)。
  • 再起動しました(明らかに、それを指摘したいだけです)。
  • 無効Windowsファイアウォールをテストします(エラーの原因ではありません)。

私は行方不明ですか?

EDIT:

 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ファイルに追加されます。

+3

私たちにコードを教えてください – Baksteen

+1

行き先コードを教えてください。 –

+0

インデックスは何ですか、配列の長さは... –

答えて

2

私はわからないんだけど、あなたのコードを見て、IndexOutOfArrayExceptionは、次の行に関連することができる。

if (lineSplit[0].ToString() != "header") 
{ 
    currentInt = int.Parse(lineSplit[8].ToString().Trim()); 
} 

あなたはlineSplitで返さ何があったかどうかを確認していないようです。たとえば、読み込んだLogFileが何らかの形で修正され、新しい行が含まれていると、lineSplit [0]の問題が発生するか、またはログが変更され、現在の行の9番目の列の値がないlineSplit [8]

+0

私は同じことを考えていました。あなたはその行にエラーがあると思いますが、それはそうではありません。ファイル(私は手動でチェックした)も構造を変更していません。 –

+1

いつもエラー行はコードの正確な行にあるとは限らないので、私は通常メソッド境界(この場合は 'Main')を調べます。そこにブレークポイントを入れてデバッグできますか?または、lineSplitに必要なインデックスが含まれていることを確認するためのチェックを追加した場合はどうなりますか? - (つまり、---- if(lineSplit。Count()> = 9 && lineSplit [0] .ToString()!= "header")----) – hsoesanto

+0

ああ!それはうまくいった。すべての混乱のため申し訳ありませんが、明らかにファイルのどこかに、間違って形成された行があります(初めて起こったとき)。私はそれが何であるかを見なければならないでしょうが、その間に9のカウントが確定していることを確認するためのチェックが行われます。ありがとう、私のコードを投稿しないように私に教えてくれるトン! –

関連する問題