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

プログラムを実行するときは、必要な引数をプログラムに渡す必要があります。これを行うには、コマンドラインからプログラムを実行するか、VisualStudioを実行するときに次の手順を実行します。

  1. プロジェクトを右クリック
  2. プロパティ
  3. デバッグタグ
  4. [スタートオプション]->[コマンドライン引数]で引数を入力します
于 2013-03-03T12:31:27.370 に答える
1

プログラムの開始時またはプログラムの開始時に、ユーザーにパスを入力させますか? 最初の場合は、パスを要求する Console.Read() メソッドを追加する必要があります。

後者の場合は、プログラムの起動時にパスを引数として渡す必要があります。また、args 配列から読み取る前に、args 配列に対してチェックを実行して、データが含まれていること、およびそのデータが有効なパスであることを確認する必要があります。

何かのようなもの:

 if(args.Length > 0 && Directory.Exists(args[0]))
 {
   // Do Something.
 }
于 2013-03-03T12:39:27.893 に答える
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 に答える