2

ここで非常に近い例を見てきました:

ファイルを日付順に並べ替える

しかし、私は LINQ を初めて使用し、動作させることができませんでした (DirectoryInfo または FileInfo クラスを理解していない)。

必要なコード スニペットは次のとおりです。

(配列を割り当てる場合):

string[] files = Directory.GetFiles(Server.MapPath("~/User_Saves/" + WebSecurity.CurrentUserName), "*.xml");

for(int i = 0; i < files.Length; i++)
{
    files[i] = files[i].Substring(files[i].LastIndexOf("\\") + 1);
    files[i] = files[i].Substring(0, files[i].Length - 4);
}

(最後の部分、つまり「for ループ」は、単純にファイルへのパスと、予期される唯一のファイル拡張子 (".xml") を文字列から取り除き、クリーンなファイル名だけを残します)。

(配列を書き込む場合):

[このスニペットは、この質問への回答に必要ないかもしれませんが、念のため]

@foreach(string file in files)
{
    <p>
        <button title="Permanently delete the requisition named, &quot;@file&quot" type="button" id="@file" class="fileDelBtn">DEL</button>&nbsp;<span style="color: #000;">~</span>&nbsp;<span id="@file" class="listFile">@file</span>
    </p>
    hasSavedFiles = true;
}

私が試したこと:

string [] files = new DirectoryInfo(Server.MapPath("~/User_Saves/" + WebSecurity.CurrentUserName)).GetFiles().OrderBy(files => files.LastWriteTime).ToArray;

このエラーのために失敗します: CS0136: 'files' という名前のローカル変数をこのスコープで宣言することはできません。

一つには、ここを見た後でも、ラムダ演算子を理解できません : http://msdn.microsoft.com/en-us/library/bb311046.aspx大いに感謝しますが、決して主な質問ではありません)。

次に、この例を使用すると、DirectoryInfo() には 2 つの引数を取るオーバーロードがないことがわかっているため、「*.xml」ファイルのみを「取得」する機能を失う可能性があります。必要。

いつものように、どんな助けも大歓迎です。さらに役立つ情報があれば、遠慮なくお尋ねください。

4

2 に答える 2

7
var filesInOrder = new DirectoryInfo(path).GetFiles()
                        .OrderByDescending(f => f.LastWriteTime)
                        .Select(f => f.Name)
                        .ToList();
于 2013-04-15T16:09:54.930 に答える
0

ファイルをすぐに列挙したくない場合は、このようなことができます。

public static IEnumerable<string> GetXmlFilesByLastWriteTime(string path)
{
    var directoryInfo = new DirectoryInfo(path);
    if(!directoryInfo.Exists) return Enumerable.Empty<string>();

    var query = 
        from file in directoryInfo.GetFiles()
        where file.Extension.ToLower() == ".xml"
        orderby file.LastWriteTime
        select file.Name;

    return query;
}

使用法:

var files = GetXmlFilesByLastWriteTime(path).ToList();
于 2013-04-15T16:33:14.993 に答える