0

该程序应该显示目录的路径和目录(如果存在),那么它还应该显示内部具有以下扩展名的文件(即 .doc、.pdf、.jpg、.jpeg)但我收到错误

*指数数组的边界之外。

在这行代码上

string directoryPath = args[0];

这是主函数中的代码

 class Program
    {
        static void Main(string[] args)
        {

                string directoryPath = args[0];
                string[] filesList, filesListTmp;
                IFileOperation[] opList = { new FileProcNameAfter10(),
                                            new FileProcEnc(),
                                            new FileProcByExt("jpeg"),
                                            new FileProcByExt("jpg"),
                                            new FileProcByExt("doc"),
                                            new FileProcByExt("pdf"),
                                            new FileProcByExt("djvu")
                                            };
                if (Directory.Exists(directoryPath))
                {
                    filesList = Directory.GetFiles(directoryPath);
                    while (true)
                    {
                        Thread.Sleep(500);
                        filesListTmp = Directory.GetFiles(directoryPath);
                        foreach (var elem in Enumerable.Except<string>(filesListTmp, filesList))
                        {
                            Console.WriteLine(elem);
                            foreach (var op in opList)
                            {
                                if (op.Accept(elem)) op.Process(elem);
                            }
                        }
                        filesList = filesListTmp;
                        if (Console.KeyAvailable == true && Console.ReadKey(true).Key == ConsoleKey.Escape) break;
                    }
                }
                else
                {
                    Console.WriteLine("There is no such directory.");

                }


        }
    }

我该如何处理这个错误,它似乎很常见,但它以不同的方式发生

4

3 回答 3

1

您需要在运行程序时将必要的参数传递给程序。您可以通过从命令行运行程序来执行此操作,或者在运行 Visual Studio 时执行以下操作:

  1. 右键单击项目
  2. 特性
  3. 调试标签
  4. 在开始选项 -> 命令行参数下输入参数
于 2013-03-03T12:31:27.370 回答
1

您可能希望从命令行将参数传递到程序中。

像这样:

> yourProgram.exe directoryName

另外,为了避免代码中出现此类问题,

if(args.Length > 0){
  string directoryPath = args[0];
}else{
  //print a help message and exit, or do something like set the 
  //default directoryPath to current directory
}
于 2013-03-03T12:35:16.200 回答
1

您希望用户在程序启动时或启动程序时输入路径吗?如果是第一个,那么您应该添加一个 Console.Read() 方法来询问路径。

如果是后者,则需要在启动程序时将路径作为参数传递。您还应该在读取 args 数组之前对其进行检查,以检查它是否包含数据并且该数据是有效路径。

就像是:

 if(args.Length > 0 && Directory.Exists(args[0]))
 {
   // Do Something.
 }
于 2013-03-03T12:39:27.893 回答