繁体   English   中英

如何按.asp.net-webpages中上次修改的日期顺序对.GetFiles()中的字符串数组进行排序?

[英]How can I sort my string array from .GetFiles() in order of date last modified in asp.net-webpages?

我在这里看到了一个非常接近的例子:

按日期对文件排序

但是我是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:无法在此范围中声明名为“文件”的局部变量,因为它将赋予“文件”不同的含义,该变量已在“父或当前”范围中用于表示其他内容

首先,即使在查看以下内容后,我也无法理解lambda运算符,对于我的一生: http : //msdn.microsoft.com/zh-cn/library/bb311046.aspx (仅对此进行澄清,非常感谢,但无论如何,这并不是真正的主要问题)。

其次,使用此示例,我知道DirectoryInfo()没有带有2个参数的重载,因此我可能会失去只希望保留“ * .xml”文件的“获取”的能力,但可能并非绝对如此必要。

与往常一样,我们非常感谢您的帮助,如果有任何进一步的信息对您有所帮助,请随时询问。

var filesInOrder = new DirectoryInfo(path).GetFiles()
                        .OrderByDescending(f => f.LastWriteTime)
                        .Select(f => f.Name)
                        .ToList();

如果您不想立即枚举文件,则可以执行类似的操作。

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM