【问题标题】:Find all files in a shared special folder (Virtual Folders)查找共享特殊文件夹(虚拟文件夹)中的所有文件
【发布时间】:2012-10-23 14:01:33
【问题描述】:

我正在寻找一种方法来查找共享特殊文件夹(虚拟文件夹)中的所有文件。 例如Desktop 是一个共享文件夹,所有用户都有一个公共Desktop 和一个私人Desktop。通过使用文件资源管理器导航到Desktop,您将看到两个桌面的内容合并在一起。


例子:

所有人共享文件夹:

dir C:\Users\Public\Desktop
Testfile1
Testfile2

当前用户的文件夹:

dir C:\Users\usera\Desktop
Testfile3
Testfile4

现在我想通过循环槽C:\Users\usera\Desktop 来获取从Testfile1Testfile4 的所有文件

有人知道如何获取合并在一起的两个目录的文件列表吗? 此外,不仅适用于 Desktop,还有其他文件夹的行为方式相同。


伪代码:

arrayDesktop = FunctionThatGetsAllFilesFrom(@"C:\Usera\Desktop");
foreach (var file in arrayDesktop)
{
    Console.WriteLine(file);
}

现在应该打印出来

Testfile1
Testfile2
Testfile3
Testfile4

【问题讨论】:

标签: c# windows file special-folders


【解决方案1】:

这不是经过测试的代码,因此请原谅任何错误,但它应该足以让您入门。

foreach (string dir in Directory.GetDirectories(@"c:\Users"))
{
    string fullDir = Path.Combine(dir, "Desktop");

    if (Directory.Exists(fullDir))
    {
        foreach (string file in Directory.GetFiles(fullDir))
        {
            Console.WriteLine(file);
        }
    }
}

除非您以管理员身份运行此程序,否则您可能会遇到安全问题,即无法读取目录。在这种情况下,您将需要 System.Net.NetworkCredential 对象并将管理员帐户存储在本地缓存中 - 类似这样。

NetworkCredential credential = new NetworkCredential(username, password, domain);
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new Uri(@"\\computer-uri"), "Basic", credential);

【讨论】:

  • 这与问题不符。您的代码仅适用于桌面。
  • @Eun 似乎其他人也犯了同样的“错误”,你的问题令人困惑。如果您提供了某种伪代码来向我们展示您在寻找什么?
【解决方案2】:

使用Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory) 分别获取桌面和公共桌面上的文件。

对于其他虚拟文件夹,您可以查看documentation。但是你仍然需要自己合并所有文件。

【讨论】:

  • 如我之前所说,我不只想要桌面,我还想要另一个VirtualFolders
  • 您可以在文档中找到其他虚拟文件夹。我已经编辑了我的答案以反映这一点。
【解决方案3】:

它们是文件系统上的独立文件夹。 Windows 只是将它们结合起来显示在桌面上。您将不得不从两个文件夹中获取所有文件并将它们合并到一个列表中。

您可以使用Directory.GetFiles 获取给定文件夹中的文件列表。

从两个文件夹中获取文件后,您可以将它们与 Linq Concat 扩展方法结合起来。

【讨论】:

  • 我知道这是两个独立的文件夹,问题是不仅有桌面共享,还有其他文件夹。而且我不想全部检查。我想知道是否有一种方法可以为我“合并”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 2012-08-05
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多