2

特定のディレクトリから番号順でファイル名のリストを取得する必要があります。実際には、ファイル名は文字列と数値の組み合わせですが、数値で終わります。

例: page_1.png、page_2.png、page3.png...、page10.png、page_11.png、page_12.png...

私のC#コードは以下です:

string filePath="D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\";
string[] filePaths = Directory.GetFiles(filePath, "*.png");

次の形式で取得されます。

page_1.png
page_10.png
page_11.png
page_12.png
page_2.png...

次のように並べられたリストを取得することを期待しています。

page_1.png
page_2.png
page_3.png
[...]
page_10.png
page_11.png
page_12.png
4

5 に答える 5

5

Ian Griffiths は、C# の自然な並べ替えを行います。数値がどこに表示されるかについての仮定は行わず、app-1.0.2、app-1.0.11 など、複数の数値コンポーネントを含むファイル名を正しく並べ替えます。

于 2013-05-30T10:31:43.243 に答える
2

まず、番号を抽出できます。

static int ExtractNumber(string text)
{
    Match match = Regex.Match(text, @"_(\d+)\.(png)");
    if (match == null)
    {
        return 0;
    }

    int value;
    if (!int.TryParse(match.Value, out value))
    {
        return 0;
    }

    return value;
}

次に、次を使用してリストを並べ替えることができます。

list.Sort((x, y) => ExtractNumber(x).CompareTo(ExtractNumber(y)));
于 2013-05-30T10:33:12.290 に答える
0

このコードはそれを行います:

var dir = @"C:\Pictures";
var sorted = (from fn in Directory.GetFiles(dir)
                let m = Regex.Match(fn, @"(?<order>\d+)")
                where m.Success
                let n = int.Parse(m.Groups["order"].Value)
                orderby n
                select fn).ToList();

foreach (var fn in sorted) Console.WriteLine(fn);

また、名前に番号が含まれていないファイルも除外します。

ファイル名のより具体的な名前構造に一致するように正規表現パターンを変更することができます。

于 2013-05-30T10:34:40.253 に答える