4

フォルダーが別のフォルダーのサブディレクトリであるかどうか、およびこれの間にいくつのステップがあるかを調べるメソッドの単純な API セットを探しています。何かのようなもの:

int numberOfFoldersDown(string parentFolder, string subfolder)  { ... }

System.IO.Path書くのは面倒ですが、非常に便利なように見えるので、またはアセンブリのどこかにあるはずだと思ったのですが、System.IO.Directoryそこに役立つメソッドが見つかりません。これらの関数は利用できますか、それとも自分で作成する必要がありますか?

4

4 に答える 4

0

すべてのフォルダーを反復処理してパス名を取得し、パス名を取得したら、その文字列をループして各「/」をチェックし、/ の数を数えます。たとえば、次のようになります。

C:/ユーザー/プログラム ファイル/

3 / あるので、必要なファイル/フォルダーへの 3 つのホップがあります

うまくいけば、これはあなたが望むものに役立つ情報です.

于 2013-10-11T12:38:25.343 に答える
0

私が知っている限り、それを行う唯一の方法は

parent folder : Split the path on "\" and think to remove the drive letter and colon
subfolder     : navigate it recursively (which can be time consuming)

これには他にも多くの点を考慮する必要がありますが、これが大きなアイデアです。

編集:ここにあなたが必要とするもののサンプルがあります...もっと多くの仕事が必要ですが、それは良いスタートだと思います...利点は、パスを表す文字列だけでなく、未知のフォルダー構造で作業できることです。

public static class FoldersHelper
{
    public static int ParentFolderCount(string path)
    {
        int parentcnt = 0;

        if (System.IO.Directory.Exists(path))
        {
            string pathroot = Path.GetPathRoot(path);
            path = path.Remove(1, pathroot.Length);
            parentcnt = path.Split('\\').Count()-1;
            return parentcnt;
        }
        else
        {
            throw new Exception("not a folder exception");
        }

        return 0;
    }

    public static int ChildFolderCount(string path)
    {
        int childcnt = 0;
        int maxchild = 0;

        if (System.IO.Directory.Exists(path))
        {
            if (Directory.GetDirectories(path).Length > 0)
            {
                foreach (string subpath in Directory.GetDirectories(path))
                {
                    childcnt = ChildFolderCount(subpath) + 1;
                    if (childcnt > maxchild) maxchild = childcnt;
                }
            }
        }
        else
        {
            throw new Exception("not a folder exception");
        }

        return maxchild;
    }

}
于 2013-10-11T12:39:12.033 に答える
0

おそらくそれらすべてを繰り返すことによって、何らかの方法でパスを見つけます。

バックスラッシュでパスを分割するものを見つけたら、その部分を配列に入れます。配列を反転し、その配列を反復して、フォルダー名がparentfoldername文字列と一致するかどうかを確認します。ある場合は、ステップのインデックス + 1 を返しますか?

于 2013-10-11T12:50:40.227 に答える