2012-01-27 52 views
0

我想模拟不同的用户,以便找到两个目录之间的差异。这是我的代码,但是当查询执行时我得到了拒绝访问。注意用户是正确的,当两个DirectoryInfo执行时,上述模拟工作。如何在linq查询中的不同目录中模拟不同的用户?

Dim impersonateUser As New UserImpersonation 
      impersonateUser.impersonateUser("user1", "", "password1") 
      Dim dir1 = New DirectoryInfo("\\10.11.11.122\OnDemand Recordings") 
      impersonateUser.undoimpersonateUser() 

      impersonateUser.impersonateUser("user2", "", "password2") 
      Dim dir2 = New DirectoryInfo("\\10.11.11.172\OCDialer_Recordings\OnDemand") 
      impersonateUser.undoimpersonateUser() 

'In this Block i get access denied 
      Dim filesinboth = From f1 In dir1.EnumerateFiles(System.IO.SearchOption.AllDirectories) 
        Join f2 In dir2.EnumerateFiles(System.IO.SearchOption.AllDirectories) On f1.Name Equals f2.Name 
        Select f1.Name 

回答

0

这模拟可能将凭据当前线程,这就是为什么你的访问被拒绝的错误 - 作为第二模拟覆盖1日(你不能有一个以上的用户在运行单线程/应用程序在同一时间)。

试试这个:

这将只工作,如果你对每个文件/目录(例如他们的名字)的信息相对较少量进行比较。将目录和文件的[完整]路径读入列表或某种树状/递归集合(您可以为后者创建类似下面的类)。

class dir 
{ 
    public string name { get; set; } 
    public List<dir> dirs { get; set; } 
    public string files { get; set; } 
} 

或者简单地存储完整路径List<string>(为便于比较相同的情况下)。

然后,分别读取完整的目录。稍后再比较。将差异存储在第3列表中。

+0

是的,就是这样,谢谢 – themis 2012-01-28 17:31:33

相关问题