0

コード:

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;
         } 

それで、誰かが何がうまくいかないのか知っていますか?私は頭を悩ませました。私はグーグルで、スタックオーバーフローを検索しました。それはばかげたものでなければなりません。何も思いつきません。

4

3 に答える 3

7

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 ループを使用して配列内の各項目を反復処理する必要があります。

于 2009-12-18T23:43:37.287 に答える
6
FileInfo[] f = new FileInfo[300];
f = d2[z].GetFiles();

別の配列をf変数に再割り当てしています。によって返される配列に要素が 1 つだけd2[z].GetFiles();あると、問題が発生する可能性があります (最初の条件では y == 0、2 番目のif条件では y == 1)。

于 2009-12-18T23:42:43.047 に答える
2

配列のインデックス 1 に要素があってはなりません。安全のために、配列を使用して反復処理するforeachfor (int i=0;i<array.length;i++)、プログラムで存在を確認しない限り、配列要素にアクセスしようとしないでください。

于 2009-12-18T23:40:25.030 に答える