2016-04-06 11 views
-5

サーバパスから接頭辞009を持つすべてのファイルを取得する必要があります。 しかし、例えば009C#ディレクトリからファイルを取得する方法

で始まる0000接頭辞ではない、具体的にすべてのファイルを取得する私のコードは、私はファイル「000028447_ ghf.doc」、「0000316647 abcf.doc」、「009028447_ test2.doc」、「ABCDを持っています.doc "

string [] files =Directory.GetFiles(filePath,"009*.doc) 

は、「abcd.doc」を除くすべてのファイルを提供しています。しかし、代わりに "009028447_ test2.doc"が必要です。 私がDirectory.GetFiles(filePath、 "ab * .doc)を与えると、" abcd.doc "が検索され、fine.Butとして動作します。" 009 "や" 00002 "のようなパターンを与えようとすると、予想

+2

ていますあなたは確実に**あなたは009 * .docですべてのファイルを取得していますか?私は真剣に小さなテストプログラムでこのアサーションをダブルチェックしたいと思います... –

+0

あなたの質問を再フォーマットして、もう少しあなたのコードを表示してください。 – Alexander

+0

[C#ディレクトリ]の重複している可能性があります。GetFiles with mask](@stackoverflow.com/questions/16664756/c-sharp-directory-getfiles-with-mask) – Set

答えて

0

あなたのコードスニペットは、パターンで終了引用符文字が欠落しているコードは次のようになります。意図したとおりに

それ以外
string[] files = Directory.GetFiles(filePath, "009*.doc"); 

、それが動作しているようだ、私はこのことではテストしてみました。質問に記載されているファイルを含むフォルダを作成します。

Contents of testfolder

次のコードを使用してファイルを検索し、すべての結果をコンソールに出力するコンソールアプリケーションを作成しました。出力は、期待される結果である:

C:結論

using System; 
using System.IO; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string filePath = @"C:\testfolder"; 
     string[] files = Directory.GetFiles(filePath, "009*.doc"); 

     // Creates a string with all the elements of the array, separated by ", " 
     string matchingFiles = string.Join(", ", files); 

     Console.WriteLine(matchingFiles); 
     // Since there is only one matching file, the above line only prints: 
     // C:\testfolder\009028447_ test2.doc 
    } 
} 

、コード:\ testfolder \ 009028447_ test2.doc

ここでは、コンソールアプリケーションの全体のコードであります働く他の結果が得られた場合は、記載されていない設定やコードに他の違いがあるはずです。

+0

コード。いくつかの環境問題。一度私はそれを考え出してすぐに更新されます。 –

-1

あなただけであなたは多分ファイルがあなたの条件に一致するかどうかを確認するためのforeachまたはLINQを使用する必要があり、間違ったファイルを受信して​​いることは事実である(と私は、チェックしなかった)場合:

のForeach:

List<string> arrPaths = new List<string>(); 
Foreach(string strPath in Directory.GetFiles(filePath,".doc")) 
{ 
if(strPath.EndsWith(".doc") & strPath.StartsWith("009")) 
arrPaths.Add(strPath); 
} 

のLINQ:

List<string> arrPaths = Directory.GetFiles(filePath,".doc").Where(pths => pths.StartsWith("009") && pths.EndsWith(".doc")).ToList(); 

どちらの方法が真の解決策よりも、回避策ですが、私は彼らが:)

01を助けている願っています

EDIT

あなただけのファイル名を取得したい場合、私はこのようなあなたのstrPathからfilePathにを引くでしょう:

のForeach:

arrPaths.Add(strPath.Replace(filePath + "\\", "")); 

のLINQ:

List<string> arrPaths = Directory.GetFiles(filePath,".doc").Where(pt => pt.StartsWith("009") && pths.EndsWith(".doc")).Select(pths => pths.ToString().Replace(filePath + "\\", "").ToList(); 
+0

一致するファイルがあるかどうかを確認するための良いアプローチ。しかし、 'Directory.GetFiles'はファイルへのフルパスを返すので、文字列の内容は' C:\ myfolder \ 009_example.doc'のようになります。 –

+0

良い追加@ LarsKristensen、私はstrPathからfilePathを引くことをお勧めします。それを編集しました:) –

+0

@ ConstantinJahnelはキャストの問題をリストするためにそのラムダ選択原因ブール値ですか? –

関連する問題