0

私は1つのディレクトリを持っています

C:\Kuldeep\kverma\kver\

その後、異なる名前の何千ものフォルダーで構成されます。各フォルダーは異なるExcelファイルで構成されます。Each Files from Different Folders を読み取る必要があります。

C:\Kuldeep\kverma\kver\ フォルダーからすべてのフォルダー パスを読み取りたい。

パスでフォルダー名を取得するために以下のコードを使用しました..

        string path = @"C:\Kuldeep\kverma\kver\";
        DirectoryInfo dir = new DirectoryInfo(path);
        Console.WriteLine("File Name Size Creation Date and Time");
                                                                                                   Console.WriteLine("========");

        foreach (DirectoryInfo dirinfo in dir.GetDirectories())
        {
            String name = dirinfo.Name;
            String pth = dirinfo.FullName;
            Console.WriteLine( name, pth);
       }

C:\Kuldeep\kverma\kver\ ディレクトリには合計 10700 個のフォルダーがありますが、54 個のフォルダーしか読み取っていません。

フォルダー名と場所を読み取るための解決策を教えてください。シングルショットで各フォルダーからファイルを読み取ることもできます。

4

3 に答える 3

1

以下の投稿の例外を処理するには、GetDirectories呼び出しの周りにtrycatchを配置する必要があります。

それはあなたにそれが適切に列挙されていない理由についての手がかりを与えるかもしれません。

http://msdn.microsoft.com/en-us/library/c1sez4sc.aspx

于 2012-05-31T10:07:18.907 に答える
0

すべてのサブディレクトリの内容を表示する場合:

// Flatten out the directory structure in to a string array.
var directoryList = Directory.GetDirectories("<<RootPath>>", "*", SearchOption.AllDirectories);

foreach (var directory in directoryList)
{
  DirectoryInfo info = new DirectoryInfo(directory);
}

質問コードを更新して編集しました:

    string path = @"C:\Kuldeep\kverma\kver\";
    string[] directoryArray = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);

    foreach (var directory in directoryArray)
    {
        DirectoryInfo dirinfo = new DirectoryInfo(directory);
        String name = dirinfo.Name;
        String pth = dirinfo.FullName;
        Console.WriteLine(name, pth);
    }
于 2012-05-31T10:57:53.720 に答える
0

再帰的なアプローチを試してください:

namespace ConsoleApplication1
{
    using System;
    using System.Collections.Generic;
    using System.IO;

    class Program
    {
        public static IList<DirectoryInfo> dirs;

        static void Main(string[] args)
        {
            dirs = new List<DirectoryInfo>();

            var dir = new DirectoryInfo(@"c:\tmp");

            GetDirs(dir);
            Console.WriteLine(dirs.Count);
        }

        public static void GetDirs(DirectoryInfo root)
        {
            foreach (var directoryInfo in root.GetDirectories())
            {
                dirs.Add(directoryInfo);
                GetDirs(directoryInfo);
            }
        }
    }
}

これにより、どのような隠れた危険が潜んでいるのかわからないので (スタック オーバーフローの例外、アクセスが拒否されましたか?) try..catch、ループ内にブロックを配置して問題を解決することをお勧めforeachします。

于 2012-05-31T10:13:09.670 に答える