使用LINQ访问文件夹

时间:2013-04-19 09:28:49

标签: c# .net linq

我想使用LINQ

访问Special文件夹
var s1 = (from folder in new DirectoryInfo(@"C:\Users\" + Environment.UserName + Environment.SpecialFolder.Desktop).GetDirectories()  
                          select folder).ToList();

我正在使用此代码,但无法检索数据

5 个答案:

答案 0 :(得分:6)

  1. System.IO和Linq不是最好的朋友,因为你想要处理文件级别的异常并且延迟执行并且磁盘访问很困难
  2. 使用Path类创建路径,例如Path.Combine(part1, part2, ...)
  3. 如果您只想要路径,则不需要DirectoryInfo课程,请使用静态DirectoryFile方法,例如Directory.GetDirectories
  4. 您可以通过Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  5. 获取桌面
  6. 你根本不需要Linq:

    string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    string[] directories = Directory.GetDirectories(path, "*.*", SearchOption.AllDirectories);
    

答案 1 :(得分:1)

要获取Desktop文件夹中的所有文件,包括子文件夹中的所有文件, 我使用这段代码:

 string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
  List<FileInfo> s1 = new DirectoryInfo(desktopPath).GetFiles("*.*", SearchOption.AllDirectories).ToList();

这可能有助于你。

答案 2 :(得分:1)

您错过了用户名和桌面之间的反斜杠:

@"C:\Users\" + Environment.UserName + Environment.SpecialFolder.Desktop

但它更容易使用:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

这将返回整个路径,而不会对c:\users\进行硬编码。

答案 3 :(得分:1)

  • 您似乎应该尝试Path.Combine
  • Environment.SpecialFolder.Desktop不是字符串,因此您必须将其转换为字符串。

试试这个:

var desktop = System.IO.Path.Combine(@"C:\Users\", Environment.UserName, Environment.SpecialFolder.Desktop.ToString());
var result = (from folder in new DirectoryInfo(desktop).GetDirectories()
                  select folder).ToList();

答案 4 :(得分:0)

您需要在\Environment.UserName之间添加反斜杠(Environment.SpecialFolder.Desktop)。

e.g。

var desktopFolder = string.Format(
    @"C:\Users\{0}\{1}",
    Environment.UserName,
    Environment.SpecialFolder.Desktop);

var s1 = (from folder in new DirectoryInfo(desktopFolder).GetDirectories()
          select folder).ToList();