1

私のC#はかなり悪いと言って始めましょう。SMB共有から提供されたファイルパスに基づいてADにセキュリティグループを作成し、ディレクトリ(ファイルパスの最後のフォルダー)に適切な権限を割り当てる、私の仕事のためのツールに取り組んでいます(他の人にも役立つことを願っています) )、次に、その上の各親フォルダーにグループ リストのアクセス許可を与えて、ユーザーがアクセス権を与えられていない他のディレクトリを表示せずにディレクトリに移動できるようにします (ファイル サーバーでアクセス ベースの列挙を使用するため、表示されません別のセキュリティ グループなどによって既にアクセス権を持っていない限り、他のすべてのフォルダーなど)。最初の 2 つの部分が動作しています。そう、

私がする必要があると思うのは、基本的に、ディレクトリの各親フォルダーのパスを含むリストを作成し、foreach ループを使用して各ディレクトリの ACL にリストのアクセス許可を割り当てることです。したがって、上記の例を使用すると、リストには次のものが含まれます。

\\fileserver\some

\\fileserver\some\example

親フォルダーの数は異なる場合があるため、リスト内のアイテムの数も異なる場合があります。

最初の質問: リストを作成してから foreach ループを使用するのが良い方法ですか、それとももっと良い方法がありますか?

2 番目の質問: どうすればよいですか? これまでのところ、バックスラッシュはエスケープ文字であるため扱いが難しいことを学びました。私は基本的に、リストに追加する前に最後のバックスラッシュとそれに続く文字を文字列から削除するために文字列をトリミングすることに行き詰まり、トリミングするものがなくなるまでこれを再帰的に行う方法に行き詰まりました。

ありがとう!

4

1 に答える 1

1

あなたは次のようなことをすることができます

class DirectoryHelper
{
    public List<string> GetDirectories(string path)
    {
        List<string> list = new List<string>();

        if (!string.IsNullOrEmpty(path))
        {
            if (path.Last() != '\\')
            {
                path += "\\";
            }

            EnumerateDictories(list, path);
        }

        return list;
    }

    private void EnumerateDictories(IList<string> results, string path)
    {
        var parent = Directory.GetParent(path);

        if (parent != null)
        {
            EnumerateDictories(results, parent.FullName);

            results.Add(parent.FullName);
        }
    }
}

これは次のように呼ばれます:

DirectoryHelper helper = new DirectoryHelper();
var dir = helper.GetDirectories(@"C:\Temp\Folder1\");

私が信じている無効なディレクトリ文字列から保護するためにいくつかのコードを追加する必要がありますが、おそらくあなたはその考えを理解しています。

-update-いくつかのバックスラッシュ処理を編集したので、気にする必要はありません。

于 2013-02-07T06:52:59.110 に答える