2017-06-14 8 views
1

160個のランダムなユーザーとパスワードを生成したいので、ユーザーとパスワード変数(forループ内)にブレークポイントを追加するとコードが正常に動作します。しかし、ブレークポイントなしでコードを実行すると、Passwords.csvの出力はすべて160行で同じになります。どんな助けもありがたいです。C#プログラムは、ブレークポイントを追加するときに異なるファイルで同じ出力を生成します。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace WriteCSVPasswords 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string path = @"c:\temp\Passwords.csv"; 
      string user = null; 
      string password = null; 
      string[] file = new string[160]; 

      for (int i = 0; i < 160; i++) 
      { 
       user = CreatePassword(4); 
       password = CreatePassword(5); 
       file[i] = user + ";" + password + ";" + Base64Encode(user + ":" + password); 
       user = null; 
       password = null; 
      } 

      if (!File.Exists(path)) 
      { 
       // Create a file to write to. 
       File.WriteAllLines(path, file, Encoding.UTF8); 
      } 



     } 

     public static string CreatePassword(int length) 
     { 
      const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.+-!"; 
      StringBuilder res = new StringBuilder(); 
      Random rnd = new Random(); 
      while (0 < length--) 
      { 
       res.Append(valid[rnd.Next(valid.Length)]); 
      } 
      return res.ToString(); 
     } 

     public static string Base64Decode(string base64EncodedData) 
     { 
      var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
      return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); 
     } 
     public static string Base64Encode(string plainText) 
     { 
      var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
      return System.Convert.ToBase64String(plainTextBytes); 
     } 
    } 
} 

答えて

5

これはブレークポイントとは関係ありません。 (コードグレーは、ブレークポイントを使用するときのタイミングの差について優れた点ですので、それに関連しています)

Random rnd = new Random();で問題が発生していることを確認してください。ランダムジェネレータを再作成するので、そしてまた。

rndをクラスレベルで宣言することをお勧めします。

+3

*少なくとも一時的に実行を一時停止すると、時間が異なるため、違う乱数が生成されるという意味で*はブレークポイントに関連しています。 :-) –

+0

さて、良い点@CodyGray –

+0

実際、クラスレベルのrndは私に正しい答えを得ます。 @CodyGray今私はこの独特の行動が起こった理由を完全に理解しています。 – hatsjie

関連する問題