2009-12-30 11 views
1

Condition requise:DirectoryCopy related

Je dois copier un dossier/répertoire et son contenu dans une machine A vers une machine B avec succès.

Avant de commencer à copier les points suivants doivent être considérés pour mes besoins.

  1. Si la machine de destination, le dossier de destination est d'avoir des autorisations d'accès ou non pour l'utilisateur dont il a besoin de copier à partir du dossier ou du répertoire source.

  2. Le répertoire de destination ne doit PAS être caché ou partagé et il doit être vide s'il existe déjà.

  3. La machine de destination attend les informations d'identification d'accès, pour gérer la même conséquence

Comment Acheive cela?

Je suis incapable de acheive avec le code ci-dessous:

using System; 
using System.IO; 

class DirectoryCopyExample 
{ 
static void Main() 
{ 
    DirectoryCopy(".", @".\temp", true); 
} 

private static void DirectoryCopy(
    string sourceDirName, string destDirName, bool copySubDirs) 
{ 
    DirectoryInfo dir = new DirectoryInfo(sourceDirName); 
    DirectoryInfo[] dirs = dir.GetDirectories(); 

    // If the source directory does not exist, throw an exception. 
    if (!dir.Exists) 
    { 
     throw new DirectoryNotFoundException(
      "Source directory does not exist or could not be found: " 
      + sourceDirName); 
    } 

    // If the destination directory does not exist, create it. 
    if (!Directory.Exists(destDirName)) 
    { 
     Directory.CreateDirectory(destDirName); 
    } 


    // Get the file contents of the directory to copy. 
    FileInfo[] files = dir.GetFiles(); 

    foreach (FileInfo file in files) 
    { 
     // Create the path to the new copy of the file. 
     string temppath = Path.Combine(destDirName, file.Name); 

     // Copy the file. 
     file.CopyTo(temppath, false); 
    } 

    // If copySubDirs is true, copy the subdirectories. 
    if (copySubDirs) 
    { 

     foreach (DirectoryInfo subdir in dirs) 
     { 
      // Create the subdirectory. 
      string temppath = Path.Combine(destDirName, subdir.Name); 

      // Copy the subdirectories. 
      DirectoryCopy(subdir.FullName, temppath, copySubDirs); 
     } 
    } 
} 
} 
+0

@Oded, formatage agréable, ty –

+0

@sukumar: quelle exception avez-vous? –

Répondre

1

Pour fichier vous envoyer pouvez voir votre question PROPRE ici: Machine to Machine File transfer ET un script court ici: http://www.eggheadcafe.com/community/aspnet/2/10076226/file-transfer-from-one-ma.aspx

Than, en utilisant FileInfo et DirectoryInfo - obtenir les attributs: http://msdn.microsoft.com/en-us/library/system.io.directoryinfo%28VS.71%29.aspx

Connexion à dossier distant peut être fait en utilisant DirectorySecurity: http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx

Profitez!

2

vous avez toutes ces informations dans le DirectoryInfo de votre DirectoryInfo dirInfo = new DirectoryInfo(path);

0

Vérifiez la System.Security.AccessControl.DirectorySecurity classe Vous pouvez obtenir l'objet DirectorySecurity en appelant: System.IO.Directory.GetAccessControl (« DIR_NAME ») Je ne sais pas si cela peut vous obtenir des informations sur un répertoire sur la machine distante.

2

Votre extrait de code ne copie pas vraiment les fichiers entre deux ordinateurs, mais plutôt sur la même machine. Ce qui est évident à partir de votre méthode principale.

Si vous souhaitez transférer entre des machines et cela aussi à un emplacement non partagé, vous devriez probablement vérifier les prises.

S'il s'agit d'un emplacement partagé avec les autorisations appropriées, alors File.copy vous aidera.