1

我想使用 LINQ 访问特殊文件夹

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

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

4

5 回答 5

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

    string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    string[] directories = Directory.GetDirectories(path, "*.*", SearchOption.AllDirectories);
    
于 2013-04-19T09:35:01.407 回答
1

要获取 Desktop 文件夹中的所有文件,包括子文件夹中的任何文件,我将使用以下代码:

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

这可能对你有帮助。

于 2013-04-19T09:31:51.417 回答
1

您在用户名和桌面之间缺少反斜杠:

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

但它更容易使用:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

这将返回整个路径,无需硬编码c:\users\

于 2013-04-19T09:31:53.463 回答
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();
于 2013-04-19T09:32:20.270 回答
0

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

例如

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();
于 2013-04-19T09:31:44.660 回答