Member 13424692 Ответов: 1

Сообщения об ошибках C#: исключение формата


Эй ребята,
извините за сообщение об ошибке, но у меня действительно возникли проблемы. У меня есть проект c# winforms, который получает это сообщение об ошибке:

************** Exception Text **************
    System.FormatException: Input string was not in a correct format.
       at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
       at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
       at SlashA006.Form1.IdCheck() in C:\Users\John\Desktop\John\SCAR\OperationMonkeyRaider-v2\visual studio\real\SlashA006 f\SlashA006\SlashA006\Form1.cs:line 180
       at SlashA006.Form1.Form1_Load(Object sender, EventArgs e) in C:\Users\John\Desktop\John\SCAR\OperationMonkeyRaider-v2\visual studio\real\SlashA006 f\SlashA006\SlashA006\Form1.cs:line 64
       at System.Windows.Forms.Form.OnLoad(EventArgs e)
       at System.Windows.Forms.Form.OnCreateControl()
       at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       at System.Windows.Forms.Control.CreateControl()
       at System.Windows.Forms.Control.WmShowWindow(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.Form.WmShowWindow(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


Поэтому я провел некоторое исследование, я предполагаю, что эта ошибка означает, что некоторые типы переменных могут быть смешаны, но я понятия не имею, что делать, и я не могу найти ничего релавентного в интернете. Мой код для строк 64-180 таков:

строка 64:
IdCheck();

строка 180:
public void IdCheck()
       {
           string currentDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+ @"\SlashA006";
           string path = currentDirectory + @"\saveData.txt";
           if (!File.Exists(path))
           {
              var saveDataFile = File.Create(path);
               saveDataFile.Close();
               int id = IDsetup();
               TextWriter tw = new StreamWriter(path);
               tw.WriteLine(id.ToString());
               tw.Close();
               computerID = id;
               this.Visible = true;
               System.Windows.Forms.MessageBox.Show("ID is: " + id);
               func_wait_3("500");
               this.Visible = false;
           }
           if (File.Exists(path))
           {
               bool success = int.TryParse(File.ReadAllText(path), out int idRead);
               //  printLine(idRead.ToString()); //LINE 180 ABOVE THIS ONE
               computerID = idRead;
           }
       }

Еще раз прошу прощения за вопрос новичка, но я был бы очень признателен за любую помощь. Спасибо!

Что я уже пробовал:

Как я уже сказал выше, я попытался найти в интернете примеры этой проблемы, но безрезультатно. Я изменил строку 180 С parse на tryparse, но это тоже не сработало.

1 Ответов

Рейтинг:
8

Dave Kreskowiak

В основном это означает, что любой текст, который вы пытаетесь преобразовать в тип числа или тип даты, не является строкой символов, которые могут быть преобразованы в этот тип.

Если вы введете "AXG012", а затем наберете, чтобы преобразовать его в целое число, вы получите ошибку, о которой говорите.

В вашем примере может показаться, что Вы читаете весь файл и пытаетесь преобразовать его в целое число. Символы возврата каретки и перевода строки не преобразуются в целые числа, поэтому я не удивлен, что вы получаете эту ошибку.

То, что ты делаешь, очень странно. Обычно вы не выполняете никаких файловых операций в параметрах для TryParse.