私はいくつかのファイル、いくつか含まれているディレクトリ持っている.txt
といくつかを.sql
。.sql
ファイルに焦点を当てましょう。
これらのファイルには、解析して後で実行する必要のあるSQLステートメントが含まれていますが、ファイルには1_ORCA_3_9_56.sql
、99_ACT_VERSAO.sql
または他の名前のような名前が付けられています。重要な部分は、実行する必要のある順序を決定するために開始する番号だけです。
Linqを使用して、すべてのファイルの昇順でリストを表示する関数を作成しました(実際には、フルネーム/パスを取得します。これが必要です)が、クエリは0個のアイテムを返します。
これは関数です:
public List<string> ListaDeFicheiros(string Directoria)
{
Global.Erro = "";
Global.ErroGrave = false;
string caminho = "";
var Paths = new List<string>();
Version version = null;
var lastVersion = new DirectoryInfo(Directoria).EnumerateFiles()
.Where(d => d.Name.ToLower().EndsWith(".sql"))
.Select(d => new { Directory = d.Directory, Token = d.Name.Split('_') })
//.Select(d => new { Directory = d, Token = d.Name.Split('_') })
.Where(x => x.Token.Length == 3 && Version.TryParse(x.Token[2], out version))
.Select(x => new { Directory = x.Directory, Date = x.Token[1], Version = version })
.OrderByDescending(x => x.Version)
.Select(x => x.Directory.FullName);
Paths = lastVersion.ToList();
return Paths;
}
どんな助けでも正確に言うでしょう、どんな質問でもただコメントをするだけで、私はできるだけ詳細に答えようとします。
.sqlファイルを取得し、他の拡張子を無視する必要があることを覚えておいてください。
Directory.GetFiles()
「* .sql」ファイルのみを列挙するために使用することをお勧めします。次にSelect
、フルパスと解析されたバージョンを含む匿名型を使用して作成します。
Path.GetFileName()
パスなしでファイル名を取得するために使用するバージョンを解析します。ファイル名の形式が正しくない場合は、バージョンをに設定し-1
ます。
次に、有効なバージョンをフィルタリングし、そのバージョンで列挙を並べ替えて、並べ替えられたファイル名のリストを返します。
List<string> Paths = Directory.GetFiles(Directoria, "*.sql", SearchOption.TopDirectoryOnly).
Select(f => {
int version;
string[] parts = Path.GetFileName(f).Split('_');
if (parts.Length < 1 || !int.TryParse(parts[0], out version))
version = -1;
return new {File = f, Version = version};
}).
Where(f => f.Version > -1).
OrderBy(f => f.Version).
Select(f => f.File).ToList();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加