2

C# 2008 に問題があるようです。特定のフォルダー内のすべてのファイルのリストを表示する単純なプログラムを作成しています。Windows フォルダー内のシステム ファイルを試してみることにしました。ファイルのリストが表示され、例外が発生します。コードは次のとおりです。

if (EnterNumber == "1")
{
    Console.WriteLine("Files");
    DirectoryInfo folderInfo = new DirectoryInfo("F:\\WINDOWS");
    FileInfo[] Files = folderInfo.GetFiles();

    String UserChoice = Console.ReadLine();


    for (int index = 0; index < Files.Length; index++)
    {


        Console.WriteLine("{0}, {1} ({2})", index++, Files[index].Name, Files[index].Length);
    }
    Console.Write("Return To Main Menu?: ");
    if (UserChoice == "y")
    { 

したがって、ユーザーが番号 1 を押してファイルを表示すると、リストに表示されます。Windows フォルダ内のファイルが表示されます。しかし、コンソールの書き込み行にいくつかの情報が表示されているのがわかりますか? エラーに対するメッセージを含む行が表示されます。インデックスが配列の境界外にあるという例外が発生します。配列とは何かは知っていますが、その情報を適用するのに問題があります。このエラーを取り除く方法を教えていただければ幸いです。そのため、リストの長さに関係なく、ファイルは正常に表示されます。また、ユーザーが画面をクリアしてメイン メニューに戻ることを許可する方法はありますか? clear 関数を試してみましたが、ユーザーが選択を再度入力できるようにする if ステートメントを追加し続ける必要がありますか?

4

2 に答える 2

3
        for (int index = 0; index < Files.Length; index++)
        {
            Console.WriteLine("{0}, {1} ({2})", index++, Files[index].Name, Files      [index].Length);
        }

問題は書き込み行にあります。インデックスを再度インクリメントしています。index ++ではなくindexに変更するだけです。

于 2012-01-12T21:45:23.817 に答える
2

変更してみてください:

Console.WriteLine("{0}, {1} ({2})", index++, Files[index].Name, Files[index].Length);

に:

Console.WriteLine("{0}, {1} ({2})", index, Files[index].Name, Files[index].Length);

++演算子 ( MSDN ドキュメント) は、おそらく一度に 1 つだけ実行したい場合に、ループ内で 2 回インクリメントされています。

于 2012-01-12T21:44:19.603 に答える