0

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


例子:

所有人的共享文件夹:

dir C:\Users\Public\Desktop
Testfile1
Testfile2

当前用户的文件夹:

dir C:\Users\usera\Desktop
Testfile3
Testfile4

现在我想通过循环Testfile1获取所有文件Testfile4C:\Users\usera\Desktop

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


伪代码:

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

现在应该打印出来

Testfile1
Testfile2
Testfile3
Testfile4
4

3 回答 3

0

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

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);
于 2012-10-23T14:16:17.660 回答
0

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

对于其他虚拟文件夹,您可以查看文档。但是您仍然必须自己合并所有文件。

于 2012-10-23T14:13:43.747 回答
-1

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

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

从两个文件夹中获得文件后,您可以将它们与 LinqConcat扩展方法结合使用。

于 2012-10-23T14:09:10.207 回答