(C #) Исключение за пределами массива FileInfo ... за исключением того, что это не - PullRequest
0 голосов
/ 19 декабря 2009

Код:

DirectoryInfo[] d2 = new DirectoryInfo[400];
d2 = moreDirect.GetDirectories();
//Declaring FileInfo array
FileInfo[] f = new FileInfo[300];
f = d2[z].GetFiles();
if (d2[z].Exists)

{  
    if (f[y] != null)
    {
     ...
     //FileInfo does it stuff and somewhere it does ++y depending on the situation blahblahblah

         if (f[y] == null) <-------- Right here is where it does it!  And y only equals 1 here.  I checked.
         {
              y = 0;
              fileTime = false;
              break;
         } 

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

Ответы [ 3 ]

7 голосов
/ 19 декабря 2009

GetFiles () возвращает новый массив. Неважно, что вы объявили f как массив размера 300 как раз перед тем, как GetFiles возвращает его, переназначает f с новым массивом, а старый размер 300 теряется.

FileInfo[] f = new FileInfo[300];  //<-- Creates a array of size 300.
f = d2[z].GetFiles();              //<-- replaces f with a new array. This array will contain just enough space for the number of files found. 

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

FileIndo[] f = d2[z].GetFiles();

Когда вам нужен доступ к нему, вы должны сначала проверить длину массивов или использовать цикл for / foreach для итерации по каждому элементу в массиве.

6 голосов
/ 19 декабря 2009
FileInfo[] f = new FileInfo[300];
f = d2[z].GetFiles();

Вы переназначаете другой массив в переменную f. Наличие только одного элемента в массиве, возвращаемого d2[z].GetFiles();, может вызвать вашу проблему (y == 0 в первом if условии и y == 1 во втором).

2 голосов
/ 19 декабря 2009

Не должно быть элемента с индексом 1 в массиве, чтобы быть в безопасности, вы должны перебирать массив, используя foreach или for (int i=0;i<array.length;i++), никогда не пытайтесь получить доступ к элементу массива, если вы не подтвердили его существование программным путем.

...