Исправить ошибку выхода за пределы массива при шифровании текста - C#
Формулировка задачи:
подскажите почему возникает ошибки в коде
и как реализовать то что пользователь не может просматривать и изменять файл
подчеркнутой строки не должно быть
это возникает при шифровании
static void Encrypt(byte[] buf, int len, string pass)
{
int n = 0;
for (int i = 0; i < len; i++)
{
buf[i] = (byte)(buf[i] ^ (byte)pass[n]);
n++;
if (n > pass.Length - 1) n = 0;
}
}
static void Main(string[] args)
{
Random rnd = new Random();
int score = 0;
List<Score> scoreTable = ReadScores();
Console.WriteLine("Введите имя пользователя");
string nameUsers = Console.ReadLine();
Score newScore = new Score();
newScore.name = nameUsers;
newScore.score = score;
Console.WriteLine("Введите команду");
string command = Console.ReadLine();
if (command == "clear")
{
System.IO.File.Delete("scores.txt");
System.IO.File.Create("scores.txt");
return;
}
Console.Clear();
int i = 0;
for (i = 0; i < scoreTable.Count; i++)
{
if (scoreTable[i].name == nameUsers)
{
if (scoreTable[i].score < score)
{
scoreTable[i].score = score;
}
break;
}
}
if (i == scoreTable.Count)
{
scoreTable.Add(newScore);
}
scoreTable.Sort(CompareScore);
if (scoreTable.Count > 7)
{
scoreTable.RemoveRange(7, scoreTable.Count - 7);
}
DrawScores(scoreTable);
SaveScores(scoreTable);
string filenameIn = "scores.txt";
string password = "1";
FileStream f1 = new FileStream(filenameIn, FileMode.Open);
byte[] buffer = new byte[8192];
int bytesReaded = 0;
long totalReaded = 0;
long totalBytes = f1.Length;
Console.Write("Завершено:");
while ((bytesReaded = f1.Read(buffer, 0, 8192)) > 0)
{
Encrypt(buffer, bytesReaded, password);
f1.Write(buffer, 0, bytesReaded);
totalReaded += bytesReaded;
long persent = totalReaded * 100 / totalBytes;
Console.CursorLeft = 10;
Console.Write("{0}%", persent);
}
f1.Close();
Console.ReadKey();
}
private static List<Score> ReadScores()
{
string rawData = System.IO.File.ReadAllText("scores.txt");
string[] parsedData;
parsedData = rawData.Split(new string[] { " ", "\r\n" },
StringSplitOptions.RemoveEmptyEntries);
List<Score> scoreTable = new List<Score>();
for (int i = 0; i < parsedData.Length; i += 2)
{
Score userScore = new Score();
userScore.name = parsedData[i];
userScore.score = Convert.ToInt32(parsedData[i + 1]);//ошибка "индекс находится вне границ массива" возникает периодически
scoreTable.Add(userScore);
}
return scoreTable;
}Решение задачи: «Исправить ошибку выхода за пределы массива при шифровании текста»
textual
Листинг программы
for (int i = 0; i < parsedData.Length-1; i += 2)