2

我需要根据上次创建或修改文件的日期和时间对文件进行排序,并首先显示最新添加的文件。基本上,asp.net 表单用于在网络服务器上上传文件,上传后,默认情况下文件会根据其名称进行组织,或者我应该按字母顺序排列。那么,谁能帮我根据上传的时间对它进行排序和组织。

protected void getFiles()
{
    System.Text.StringBuilder sbld = new System.Text.StringBuilder();
    if (Directory.Exists(Server.MapPath("~/Package_Image/")))
    {
        DirectoryInfo dirMail = new DirectoryInfo(Server.MapPath("~/Package_Image/"));
        FileInfo[] DefaultFiles = dirMail.GetFiles();
        foreach (FileInfo fileDir in DefaultFiles)
        {
            if (fileDir.Extension.ToLower() == ".jpg" || fileDir.Extension.ToLower() == ".gif" || fileDir.Extension.ToLower() == ".png" || fileDir.Extension.ToLower() == ".jpeg" || fileDir.Extension.ToLower() == ".bmp")
            {
                // need sorting on the basis of date-time, it was created or uploaded.
                sbld.Append("<div class='itemBox'><table width='100%'><tr><td height='160'><img width='200' src='../Package_Image/" + fileDir.Name + "'></img></td></tr></table></div>");
            }
        }
        Literal1.Text = (sbld.ToString());
    }
}

排序可能使用 C#,这将由服务器本身完成,或者如果可能的话,我可以使用 javascript 或 jquery 进行排序,以便可以在客户端本身进行处理。

4

2 回答 2

3

非常简单。确保在其他 using 语句旁边添加了对 System.Linq 的引用。

//using System.Linq
protected void getFiles()
{
    System.Text.StringBuilder sbld = new System.Text.StringBuilder();
    if (Directory.Exists(Server.MapPath("~/Package_Image/")))
    {
        DirectoryInfo dirMail = new DirectoryInfo(Server.MapPath("~/Package_Image/"));
        FileInfo[] orig = dirMail.GetFiles();        
        // Sort on server
        FileInfo[] DefaultFiles = (from file in orig orderby file.CreationTime select file).ToArray();
        foreach (FileInfo fileDir in DefaultFiles)
        {
            if (fileDir.Extension.ToLower() == ".jpg" || fileDir.Extension.ToLower() == ".gif" || fileDir.Extension.ToLower() == ".png" || fileDir.Extension.ToLower() == ".jpeg" || fileDir.Extension.ToLower() == ".bmp")
            {
                // need sorting on the basis of date-time, it was created or uploaded.
                sbld.Append("<div class='itemBox'><table width='100%'><tr><td height='160'><img width='200' src='../Package_Image/" + fileDir.Name + "'></img></td></tr></table></div>");
            }
        }
        Literal1.Text = (sbld.ToString());
    }
}
于 2013-04-05T04:08:19.573 回答
0

“System.Linq”可以提供帮助。包括一个 using 语句。

然后你可以像这样编写一个 lambda 表达式或一个 linq 查询

拉姆达表达式:

FileInfo[] SortedFiles = dirMail.GetFiles().OrderBy(file => file.CreationTime).ToArray();

Linq 查询:

FileInfo[] SortedFiles = (from file in dirMail.GetFiles() order by file.CreationTime select file).ToArray();

如果您需要先按日期时间降序排序,然后按名称升序排序,

拉姆达表达式:

FileInfo[] SortedFiles = dirMail.GetFiles().OrderByDescending(file => file.CreationTime).ThenBy(file => file.Name).ToArray();

Linq 查询:

FileInfo[] SortedFiles = (from file in dirMail.GetFiles() orderby file.CreationTime descending, file.Name ascending select file).ToArray();
于 2013-04-05T04:29:26.483 回答