ошибка загрузки файла - PullRequest
       10

ошибка загрузки файла

0 голосов
/ 13 августа 2011

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

C:\C#FILES>program.exe

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the boun
ds of the array.
   at ConsoleApplication2.Program.loadAccounts()
   at ConsoleApplication2.Program.Main(String[] args)

C:\C#FILES>

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

вот способ загрузки аккаунтов

private static void loadAccounts()
{
    using (TextReader tr = new StreamReader("accounts.txt"))
    {
        string line = null;
        while ((line = tr.ReadLine()) != null)
        {
            String[] details = line.Split('\t');
            accounts.Add(details[0] + ":" + details[1]);
        }
    }
}

часть accounts.txt - часть, в которой я не уверен, я думал, что это будет следующим Имя пользователя (вкладка) пароль как это

username    password

однако выдает ошибку, показанную выше Кто-нибудь знает, какой должен быть правильный формат учетной записи?

Ответы [ 2 ]

2 голосов
/ 13 августа 2011

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

Я предлагаю вам распечатать соответствующую строку до разбиения, чтобы вы могли видеть, какая строка вызывает проблемы.Или возможно сделать это условно:

while ((line = tr.ReadLine()) != null)
{
    String[] details = line.Split('\t');
    if (details.Length == 1)
    {
        // Or log it, or whatever...
        Console.WriteLine("Input error: no tab in line '{0}'", line);
    }
    else
    {
        accounts.Add(details[0] + ":" + details[1]);
    }
}
0 голосов
/ 13 августа 2011

Это происходит потому, что строка, которую вы отделяете от ввода, не содержит запрошенных элементов.

Маловероятно, что первый (читай: 0 th) элемент в массиве является причинойпроблема из-за того, как .NET обрабатывает Split.

Вы проверили, что во входном файле нет пустых строк?Эта проблема может возникнуть из-за одной пустой строки (даже в конце файла).

Существует несколько проверок, которые можно добавить, например ..

if(!string.IsNullOrWhitespace(line)) ...

или

if(details.Length > 1)

Это несколько проверок, одну или обе, я бы порекомендовал реализовать (есть и другие, которые нужно учитывать), иначе вы просто слепо доверяете входным значениям, и это не очень хорошая практика в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...