2013-04-15 23 views
1

我看到这里非常接近例如:如何从.GetFiles()按asp.net-webpages中上次修改日期的顺序对字符串数组进行排序?

Sorting Files by date

但我是新来的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'的局部变量无法在此作用域中声明,因为它会给出不同的意思是'文件',它已经在'父或当前'范围内用于表示别的东西

对于其中一个,我无法理解lambda操作符,对于我的生活,即使在看这里之后:http://msdn.microsoft.com/en-us/library/bb311046.aspx (澄清这一点,将不胜感激,但不是真正的主要问题,无论如何)。第二,使用这个例子,我知道DirectoryInfo()没有带2个参数的重载,所以我可能会失去“获取”只有“* .xml”的文件的能力,我想保留它,但是可能不是绝对必要的。

一如既往,任何帮助非常感谢,如果有任何进一步的信息可以帮助你,请不要犹豫,问。

+0

简单地将其更改为'.OrderBy(F => f.LastWriteTime)' –

+0

@IliaG我会尝试,现在。在这个例子中,f是什么? – VoidKing

+0

'f'是文件数组中的元素 –

回答

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

只是所以我知道该期待什么,这会给我一个列表而不是数组正确吗? (这当然没有问题) – VoidKing

+0

@VoidKing如果你需要数组,那么只需使用'ToArray()'而不是'ToList()' –

+0

老实说,任何一种方式对我都好,但是有没有办法阻止它从添加不以“.xml”结尾的文件或删除不以“.xml”结尾的文件? – VoidKing

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(); 
相关问题