2012-01-12 158 views
2

我似乎在C#2008有问题。我正在创建一个简单的程序,显示特定文件夹内的所有文件的列表。我选择在Windows文件夹中试验系统文件。它显示文件列表,然后发生异常。这里是代码:C#索引超出范围异常

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文件夹中的文件。但是,你能看到控制台写有多条信息的行吗?一条线出现一条消息给出错。发生异常说索引超出了数组的范围。我知道一个数组是什么,但是我在应用这些信息时遇到了问题。如果你可以告诉我一个方法来消除这个错误,那么我将不胜感激。所以文件通常显示,无论列表多长。另外,有没有办法允许用户清除屏幕并返回到主菜单?我已经尝试了清晰的功能,但是我应该不断添加if语句以允许用户再次输入他们的选择吗?

回答

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 documentation)在你的循环被增加了两次,当你可能只需要去一次一个。

+0

这是正确的,for循环中的Console.WriteLine()节中的第二个i ++将始终将索引从最后一次迭代中的Files数组的边界增加。 – acm 2012-01-12 21:48:59

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

问题是在您的writeline中,您正在递增索引。我只是将其更改为索引而不是索引++。

+0

看起来是问题所在。谢谢。我可能还有几个问题,并希望得到帮助。 – user1146468 2012-01-13 00:59:40