Я должен добавить номера из моего списка в файл - PullRequest
0 голосов
/ 29 января 2020

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

System.IndexOutOfRangeException: индекс находился за пределами массива.

using System;
using System.Collections.Generic;
using System.IO;

namespace nrinfile
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numbers= new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
            string[] folderLoc = File.ReadAllLines(@"E:\folder\numbers.txt");
            for (int i = 0; i < 12; i++)
            {
                folderLoc[i] = Convert.ToString(numbers[i]);
            }
        }
    }
}`

Ответы [ 2 ]

1 голос
/ 29 января 2020

Поскольку вы хотите записать из списка номеров в файл, вам нужно будет использовать метод System.IO, который записывает в файл.

Что-то вроде:

static void Main(string[] args)
{

    string destFile = @"E:\folder\numbers.txt";

    List<int> numbers = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

    using (StreamWriter sw = new StreamWriter(destFile)) {
        for (int i = 0; i < numbers.Count(); i++)
        {
            sw.WriteLine(numbers[i].ToString());
        }
    }
}

Конструкция using заботится о закрытии файла после завершения записи в него кода и удалении любых «неуправляемых ресурсов», используемых StreamWriter.

Вместо using часть и код внутри нее, вы можете использовать другой метод, который принимает массив строк и записывает это в виде строк:

File.WriteAllLines(destFile, numbers.Select(n => n.ToString()).ToArray());
1 голос
/ 29 января 2020

Там нет гарантии , что folderLoc имеет как минимум 12 предметов

        for (int i = 0; i < 12; i++) {...}

Вы можете поставить это так (примечание folderLoc.Length вместо из 12):

        string[] folderLoc = File.ReadAllLines(@"E:\folder\numbers.txt");

        // If you want at most 12 items to be changed put the condition as 
        //   i < Math.Max(12, folderLoc.Length)
        for (int i = 0; i < folderLoc.Length; i++)
        {
            folderLoc[i] = $"{i} {folderLoc[i]}"; //TODO: Apply the correct format here
        }

Или даже (без явных циклов, но Linq запрос)

        using System.Linq;

        ...

        string[] folderLoc = File
          .ReadLines(@"E:\folder\numbers.txt")
          .Select((value, index) => $"{index} {value}")
          .ToArray();

Если вы хотите изменить top 12 строки только , Select должно быть

         ...
         .Select((value, index) => index < 12 ? $"{index} {value}" : value)
         ...

Наконец, если вы хотите просто записать 0..11 чисел в файл

         File.WriteAllLines(@"E:\folder\numbers.txt", Enumerable.Range(0, 12));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...