私は内部にupdate10、Update15、Update13という名前の多くのフォルダがあるディレクトリという名前のディレクトリがあります。 フォルダ名の数字を比較してそのフォルダへのパスを返すことで、最新のアップデートを入手する必要があります。 すべてのヘルプはあなたがLINQを使用することができますディレクトリ内の最新の更新を検索するC#
答えて
をaprecciatedされるだろう:LINQは、このような副作用を引き起こすことはありませんので、
int updateInt = 0;
var mostRecendUpdate = Directory.EnumerateDirectories(updateDir)
.Select(path => new
{
fullPath = path,
directoryName = System.IO.Path.GetFileName(path) // returns f.e. Update15
})
.Where(x => x.directoryName.StartsWith("Update")) // precheck
.Select(x => new
{
x.fullPath, x.directoryName,
updStr = x.directoryName.Substring("Update".Length) // returns f.e. "15"
})
.Where(x => int.TryParse(x.updStr, out updateInt)) // int-check and initialization of updateInt
.Select(x => new { x.fullPath, x.directoryName, update = updateInt })
.OrderByDescending(x => x.update) // main task: sorting
.FirstOrDefault(); // return newest update-infos
if(mostRecendUpdate != null)
{
string fullPath = mostRecendUpdate.fullPath;
int update = mostRecendUpdate.update;
}
cleaner versionは、アウトパラメータとしてローカル変数を使用してint?
の代わりを返すメソッドを使用しています。彼らは有害かもしれません。
注:現在、クエリでは大文字と小文字が区別されますが、有効なディレクトリとしてUPDATE11
は認識されません。あなたは大文字と小文字を区別しない比較したい場合は、適切なStartsWith
オーバーロードを使用する必要があります。
.....
.Where(x => x.directoryName.StartsWith("Update", StringComparison.InvariantCultureIgnoreCase)) // precheck
.....
ありがとうございます –
最善のアプローチは、質問が示唆にコメントとして変更された日付を使用することです。 しかし、文字列を数値としてソートするには、IComparerを使用するために行くことができます。 これはすでに行われていると、あなたがディレクトリを取得した後、サンプル
とhere
編集中に見つけることができます:
string[] dirs = System.IO.Directory.GetDirectories();
var numComp = new NumericComparer();
Array.Sort(dirs, numComp);
のdirsの最後の項目は、修正された「あなたの最後です"ディレクトリ。
この関数は、LINQを使用して最後の更新ディレクトリパスを取得します。
public string GetLatestUpdate(string path)
{
if (!path.EndsWith("\\")) path += "\\";
return System.IO.Directory.GetDirectories(path)
.Select(f => new KeyValuePair<string, long>(f, long.Parse(f.Remove(0, (path + "Update").Length))))
.OrderByDescending(kvp => kvp.Value)
.First().Key;
}
あなたは、フォルダの作成日に頼ることができれば、あなたはMoreLinq's MaxBy()
を利用することによって、これを簡略化することができます。参考のために
string updatesFolder = "D:\\TEST\\Updates"; // Your path goes here.
var newest = Directory.EnumerateDirectories(updatesFolder, "Update*")
.MaxBy(folder => new DirectoryInfo(folder).CreationTime);
を、MaxBy()
の実装は次のとおりです。
public static class EnumerableMaxMinExt
{
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector)
{
return source.MaxBy(selector, Comparer<TKey>.Default);
}
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> selector, IComparer<TKey> comparer)
{
using (IEnumerator<TSource> sourceIterator = source.GetEnumerator())
{
if (!sourceIterator.MoveNext())
{
throw new InvalidOperationException("Sequence was empty");
}
TSource max = sourceIterator.Current;
TKey maxKey = selector(max);
while (sourceIterator.MoveNext())
{
TSource candidate = sourceIterator.Current;
TKey candidateProjected = selector(candidate);
if (comparer.Compare(candidateProjected, maxKey) > 0)
{
max = candidate;
maxKey = candidateProjected;
}
}
return max;
}
}
}
私は日付を使用することはできません: –
- 1. 更新テーブルの検索
- 2. nhibernate検索、コレクションの更新
- 3. MongoDB検索 - 文書内で最新のものを探す
- 4. OSXのディレクトリの最終更新日
- 5. 検索後にgridviewを更新する
- 6. jqGrid not検索後に更新する
- 7. JPAの検索と更新の戦略
- 8. C# - リストビュー内のサブアイテムを更新する
- 9. 特定のディレクトリ内のファイルを検索するC#
- 10. ディレクトリ内のファイルを検索する
- 11. jqgrid viewrecords検索後の更新
- 12. ディレクトリ内の最新のファイルを見つける
- 13. バッチ:ディレクトリ内の最新のバッチファイルを呼び出す
- 14. Jsp Flow検索と更新用フォーム
- 15. ListView内のListViewItem内のサブアイテムの値を更新するC#(Winforms)
- 16. 高速検索と更新のためのSQL索引
- 17. ディレクトリ構造内のファイルを検索
- 18. Azureテーブルの最新のアイテムを検索する最速の方法は?
- 19. ディレクトリ内のファイル名の検索
- 20. 最新のコメントのためにPHP/MySQLのソリューションを検索
- 21. ディレクトリ内のファイルを検索して削除する最速の方法
- 22. 投稿者による最新投稿の検索
- 23. 最新のファイルをディレクトリに取得
- 24. ディレクトリから最新のエクスポートファイルをダウンロード
- 25. フォームを使用してMySQLを検索して更新する
- 26. 検索後にセクションヘッダーの値を更新します。
- 27. javascriptから更新パネル内のユーザーコントロールを更新する
- 28. 最新のFOP APIへの更新
- 29. jQueryの最新の情報に更新
- 30. ADO.NET型データセット行の最新の更新
すべてのフォルダは "Update"という単語と1桁以上の数字で始まりますか?そして、より高い数字は最新のものですか? – Steve
作成/変更された日付ははるかに正確であるべきですか? – Soundararajan
あなたはこれを行けると確信しています。あなたが試したことを投稿してください –