1

検索オプションを使用してディレクトリからファイルをロードする必要があります。2 つの検索パターンを作成しました。まず、"Client" で始まり、"_delete" 拡張子のないファイルを検索する必要があります。

2 回目の検索では、"Client" で始まり、拡張子が "_delete"のファイルを検索する必要があります。

テスト コードを実装しましたが、ファイルが見つかりませんでした。

string mask_not_like = @"Client*[^_delete\s].xlsx";
string mask = "Client*_delete.xlsx";

path1 = "c:\Client_Test.xlsx";
path2 = "c:\Client_Test_delete.xlsx";

var searchPattern1 = new Regex(mask_not_like, RegexOptions.IgnoreCase);
var searchPattern2 = new Regex(mask, RegexOptions.IgnoreCase);

var files1 = Directory.GetFiles(path1).Where(f => searchPattern1.IsMatch(f));
var files2 = Directory.GetFiles(path1).Where(f => searchPattern2.IsMatch(f));
4

2 に答える 2

2

最初の問題は、ディレクトリを必要とするメソッドにファイルパスを渡していることです。

path1 = "c:\Client_Test.xlsx";
// path one is not a directory...
var files1 = Directory.GetFiles(path1).Where(f => searchPattern1.IsMatch(f));

それはファイル名であるIOExceptionため、スローする必要があります。path1

次に、物事を過度に複雑にしています。正規表現は必要ありません (または保証されます)。

2 つのケースがあります。「Client」で始まり「_delete」で終わるファイルと、「Client」で始まりそうでないファイル。"Client" は両方に共通なので、client で始まるすべてのファイルを取得し、次に "_delete" で終わるファイルを見つけ、残りは "_delete" で終わらないファイルです。

var allFiles = Directory.GetFiles(path, "Client*.xlsx");
var endInDdelete = allFiles.Where(f => Path.GetExtension(f) == "._delete");
var doNotEndInDelete = allFiles.Except(endInDelete);

編集:拡張子が「_delete」であると誤って言っていることに気付きましたが、実際にはファイル名の末尾にすぎません。そう...

var allFiles = Directory.GetFiles(path, "Client*.*");
var endInDdelete = allFiles.Where(f => Path.GetFileNameWithoutExtension(f).EndsWith("_delete");
var doNotEndInDelete = allFiles.Except(endInDelete);
于 2014-01-29T06:22:57.520 に答える