2
if (Form1.sf != null)
{
    radarDI = new DirectoryInfo(Form1.sf);
    radarFiles = radarDI.GetFiles("*.png");
    for (int i = radarFiles.Length; i > 0; i--)
    {
        myGifListRadar.Add(radarFiles[i].Name);
    }
}

レーダーファイルには 224 個のファイルが含まれています。myGifListRadar List<string>ハードディスク上のファイルの末尾から、最後の 5 個または最後の任意の数のファイルに追加したいと考えています。

私がそれのためにやってint I = 0 ; I < test.Length; I++いるなら、追加します:

00001.png

00002.png

最後から追加したい:

00224.png

00223.png

など...だから、FORを現在のように変更しようとしましたが、範囲外の例外が発生しています:

インデックスが配列の範囲外だった

FOR の何が問題なのですか?

4

5 に答える 5

4

ゼロ バウンド インデックスなので、長さは -1 です。また、ゼロまでカウントダウンするために、それ以上の値が必要です。そうしないと、配列の最初の要素を見逃すことになります。

for (int i = radarFiles.Length - 1; i >= 0; i--)
{
}
于 2013-01-28T17:05:54.623 に答える
2

試す

for (int i = radarFiles.Length - 1; i >= 0; i--)

配列やその他のコレクションはゼロからインデックス付けを開始するため、長さから 1 を引く必要があります

于 2013-01-28T17:05:49.880 に答える
1

Enumerable.OrderByDescending+を使用できますEnumerable.Take

var last5Files = Directory.EnumerateFiles(directoryPath, "*.png")
    .Select(p => new { Path = p, FileName = Path.GetFileName(p) })
    .Select(x => new { x.FileName, Number = x.FileName.TryGetInt() })
    .Where(x => x.Number.HasValue)
    .OrderByDescending(x => x.Number.Value)
    .Select(x => x.FileName)
    .Take(5);
foreach (string fn in last5Files)
    myGifListRadar.Add(fn);

これは、int?ファイル名からを取得するために使用した拡張メソッドです。

public static class NumericExtensions
{
    public static int? TryGetInt(this string item)
    {
        int i;
        bool success = int.TryParse(item, out i);
        return success ? (int?)i : (int?)null;
    }
}

(数値のファイル名を持つpngファイルのみが必要であると仮定します)

于 2013-01-28T17:09:34.200 に答える
1

これを変える:

for (int i = radarFiles.Length; i > 0; i--)

これに:

for (int i = radarFiles.Length-1; i >= 0; i--)

あなたはリストの終わりを過ぎて始めていました。また、単に > の代わりに >= を使用する必要があります。そうしないと、ディレクトリが十分に小さい場合にファイルが失われます。

于 2013-01-28T17:07:22.967 に答える
1

ファイルにはその形式の名前があるため、これを使用できます。

var fileList = Directory.GetFiles(path)
                  .OrderByDescending(n => Path.GetFileName(n))
                  .Take(5)
                  .ToList();
于 2013-01-28T17:10:13.140 に答える