Хранить несколько int в файле .txt, каждый раз в новой строке

#c#

#c#

Вопрос:

Извините за плохое название, я не знал, как это лучше объяснить. Я только начал в Csharp, так что, вероятно, это глупая ошибка.

 private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = "CPU Usage"   " "   (int)cpuCounter.NextValue()   "%";
            string[] usageCPUay = { label1.Text };
            System.IO.File.WriteAllLines(@"C:UsersFilipDesktopCPUOutput.txt", usageCPUay);
        }
  

Итак, это код, с которым у меня проблемы, и я не могу понять, как это исправить. Я пробовал с streamwriter, но у меня возникли те же проблемы. Я хочу, чтобы вывод, который выдает cpuCounter, сохранялся в текстовом файле. Но каждый раз он просто записывает последнюю загрузку процессора, а не каждую. Нравится этот неправильный вывод. Я хочу, чтобы он вводил все полученные значения использования процессора и сохранял их таким образом, но каждый новый в отдельной строке.

Ответ №1:

Давайте проанализируем ваш код:

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

Я вижу 3 ошибки: 1. — массив содержит один элемент, поэтому вы сохраняете только одну строку. 2.- в конце строки, которую вы должны записать в текстовый файл, вы должны добавить » n» для новой строки. 3.- Я понимаю изhttps://learn.microsoft.com/en-us/dotnet/api/system.io.file .writealllines?view=netcore-3.1#System_IO_File_WriteAllLines_System_String_System_String___ что он создает файл как новый, поэтому вы можете удалять то, что у вас уже есть.

Решение:

Как и в примере, который был представлен вам по ссылке, я бы сделал следующее:

         label1.Text = "CPU Usage"   " "   (int)cpuCounter.NextValue()   "%n";
        string[] usageCPUay = { label1.Text };
    if (!File.Exists(path))
    {
        // Create a file to write to.
        File.WriteAllLines(path, usageCPUay);
    }

     else{
    File.AppendAllText(path, usageCPUay);}
  

Комментарии:

1. Или string usageCPU = $"CPU Usage: {(int)cpuCounter.NextValue()} %"; label1.Text = usageCPU; File.AppendAllText(path, usageCPU Environment.Newline) . Нет необходимости проверять, File.Exists(path) поскольку File.AppendAllText() файл создается сам по себе, если он не существует. Путь не должен быть жестко запрограммирован. В случае, если путь к рабочему столу текущего пользователя на самом деле является предпочтительным путем, то string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), CPUOutput.txt)

2. Привет, спасибо за ответ, я чувствую себя очень глупо прямо сейчас, это сработало, но я удалил массив строк и оставил его в виде строки. Поэтому вместо File. WriteAllLines Я использовал WriteAllText, поскольку AppendAllText использует строку. Так что большое вам спасибо!