2016-08-17 6 views
0

Webサーバー上のいくつかのドキュメントを扱っています。階層内の特定のレベル以下であれば、何かする必要があります。例えば: - 私は下の下の任意のフォルダ内のファイルにのみ行動する必要がC#ディレクトリ内のファイルが特定のレベル以下であることを確認します。

example.com/region/site1/ 
example.com/region/site2/ ...etc... 

SITE1 /(直接ではなくSITE1 /中)

  • 構造が似ている場合。 COM /地域/ SITE1/file.xls - 何もしない

  • example.com/region/site1/folder/file.xls - やるもの

これまではこの機能を使用していましたが、ワイルドカードを使用して「このフォルダの下の任意のフォルダ」を使用する方法はわかりません。

public bool isInWorkingDir(string url) 
    { 
     bool contains = false; 
     string lowerUrl = url.ToLower(); 

     if (lowerUrl.Contains("nor-am/site1/")) 
     { 
      contains = true; 
     } 
     return contains; 
    } 

助けていただければ幸いです。

おかげ

+1

ファイルシステムを検索してファイルを検索していますか、またはURL文字列を持っていて、その文字列がsite1 "の下のディレクトリを参照しているかどうかを確認しますか? –

答えて

0

あなたは基本的にはURLからフォルダセグメントを削除し、残りのパスがまだディレクトリセパレータが含まれているかどうかを確認することができます

public bool IsNestedUnderSubfolder(string url, string folder) 
{ 
    if (!url.StartsWith(folder)) 
     return false; 

    return url.Substring(folder.Length).Contains("/"); 
} 

// False 
IsNestedUnderSubfolder("example.com/region/site1/file.xls", "example.com/region/site1/"); 

// True 
IsNestedUnderSubfolder("example.com/region/site1/folder/file.xls", "example.com/region/site1/"); 
+0

ありがとうございます。私はこれを差し込み、今日これを撃ち、それがどのように機能するか見る。 –

+0

これは私がそれを投稿したときの質問のために働いた。私が直面している可能性のあるすべてのシナリオを説明するのに十分な詳細を提示できませんでした。私の最終的な答えは、私の文字列に必要なURLの部分が含まれていることを確認し、その後にスラッシュの数を数えることでした。それは初歩的ですが、機能します。すべての提案をありがとう。 –

0

ジャスト(ページ下)MSDNドキュメントの例から再帰ProcessDirectory関数を使用します。

https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx

リストファイル=新しいリスト();

public static void ProcessDirectory(string targetDirectory) 
{ 
    // Process the list of files found in the directory. 
    string [] fileEntries = Directory.GetFiles(targetDirectory); 
    foreach(string fileName in fileEntries) 
     ProcessFile(fileName); 

    // Recurse into subdirectories of this directory. 
    string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory); 
    foreach(string subdirectory in subdirectoryEntries) 
     ProcessDirectory(subdirectory); 
} 

// Insert logic for processing found files here. 
public static void ProcessFile(string path) 
{ 
    files.Add(path);   
} 

は、基本パスでProcessDirectoryを呼び出して、そのフォルダとそのサブフォルダ内のすべてのファイルの一覧を取得できるようになりました。そして、LINQのを使用します。

files.Where(f => f.Contains("blabla")); 
+0

なぜdownvote? –

+0

私はあなたを落胆させていませんでしたが、OPは「Webサーバー上のいくつかのドキュメントで作業していました」。 – Xiaoy312

+0

これは始まりです。しかし、それだけではOPの問題は解決しません。ファイルがターゲットの下のディレクトリにあるかどうかをチェックする方法は示されておらず、ファイルが見つかったときに再帰を中断する方法も示されていません。ところで、私はdownvoterではありません。 –

0

私の最終的なコード:

public bool isInWorkingDir(string url) 
    { 
     bool inDir = false; 
     string lowerUrl = url.ToLower(); 
     if (lowerUrl.Contains("myRegion/mySite") && countSlash(url)>6) 
     { 
      inDir = true; 
     } 
     return inDir; 
    } 
    public int countSlash(string url) 
    { 
     int length = url.Length; 
     int count = 0; 
     for (int n = length - 1; n >= 0; n--) 
     { 
      if (url[n] == '/') 
       count++; 
     } 
     return count; 
    } 
関連する問題