Исправить ошибку выхода за пределы массива при шифровании текста - 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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д