2012-04-02 55 views
4

不完全确定如何处理此问题。我已经研究了一下,但是我已经提出了一些问题。尝试连接到工作的网络驱动器,并复制出最新的文件夹(更新到一个项目)对于我来说,目录开始为\,但是当我添加到一个字符串变量它不会连接,并将不会显示时,我试图检查它。有没有一个过程呢?从网络驱动器C连接/复制#

这就是我所拥有的。在某些方面它必须是错误的。

string updir = @"\\NetworkDrive\updates\xxxxx"; 

public void CopyAll(DirectoryInfo source, DirectoryInfo target) 
    { 

     try 
     { 
      //check if the target directory exists 
      if (Directory.Exists(target.FullName) == false) 
      { 
       Directory.CreateDirectory(target.FullName); 
      } 

      //copy all the files into the new directory 

      foreach (FileInfo fi in source.GetFiles()) 
      { 
       fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); 
      } 


      //copy all the sub directories using recursion 

      foreach (DirectoryInfo diSourceDir in source.GetDirectories()) 
      { 
       DirectoryInfo nextTargetDir = target.CreateSubdirectory(diSourceDir.Name); 
       CopyAll(diSourceDir, nextTargetDir); 
      } 
      //success here 
      copyall = true;  
     } 

     catch (IOException ie) 
     { 
      //handle it here 
      copyall = false; 
     } 
    } 

我一直在使用它来复制。它运作良好。

DateTime lastHigh = new DateTime(1900, 1, 1); 
     string highDir; 
     foreach (string subdir in Directory.GetDirectories(updir)) 
     { 
      DirectoryInfo fi1 = new DirectoryInfo(subdir); 
      DateTime created = fi1.LastWriteTime; 

      if (created > lastHigh) 
      { 
       highDir = subdir; 
       lastHigh = created; 
      } 
     } 

并且找到最新的文件夹。

+1

你能显示代码,您使用的? – Msonic 2012-04-02 18:32:45

+0

我更新了我的desc与我用来试图访问驱动器。 – 2012-04-02 18:35:27

+0

这不能是*全部*您的代码。请发布整个复制方法。应该有一个'.Copy()'的地方。 – Msonic 2012-04-02 18:38:12

回答

4

你可以像这样的东西(网络共享指定访问权限)尝试:

string updir = @"\\NetworkDrive\updates\somefile"; 

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
WindowsIdentity identity = new WindowsIdentity(username, password); 
WindowsImpersonationContext context = identity.Impersonate(); 

File.Copy(updir, @"C:\somefile", true); 
+0

这最终成为我需要的基础。谢谢 – 2012-04-04 12:58:54

+2

我无法得到这个工作。首先第二个参数被定义为“类型”而不是密码。其次,这应该与WindowsIdentity.GetCurrent()一样,它仍然会引发UnauthorizedAccessException。你是如何得到这个实际工作的? – Wouter 2015-02-10 09:28:48