2012-01-29 11 views
5

Ho un programma C# autoupdater. Scaricherà un file rar che contiene i file modificati o nuovi per l'aggiornamento di alcuni software. Il file rar ha la sua struttura come la directory di base del software, ma contiene solo file o cartelle modificati o nuovi. C'è un modo semplice per "unire" questi file/cartelle alla directory di destinazione in modo che se il file/cartella esiste già verrà sostituito e se non verrà aggiunto o devo camminare manualmente attraverso ogni file/cartella e farlo da solo? Basta sperando c'è una bella funzione di merge poco che .NET ha :)C# unisce una directory con un'altra

risposta

19

DirectoryInfo Class

L'esempio seguente mostra come copiare una directory e il suo contenuto.

public static void CopyAll(DirectoryInfo source, DirectoryInfo target) 
{ 
    if (source.FullName.ToLower() == target.FullName.ToLower()) 
    { 
     return; 
    } 

    // Check if the target directory exists, if not, create it. 
    if (Directory.Exists(target.FullName) == false) 
    { 
     Directory.CreateDirectory(target.FullName); 
    } 

    // Copy each file into it's new directory. 
    foreach (FileInfo fi in source.GetFiles()) 
    { 
     Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name); 
     fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); 
    } 

    // Copy each subdirectory using recursion. 
    foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) 
    { 
     DirectoryInfo nextTargetSubDir = 
      target.CreateSubdirectory(diSourceSubDir.Name); 
     CopyAll(diSourceSubDir, nextTargetSubDir); 
    } 
} 
+0

chiedendo perché il tuo post non è mostrata a me quando scrivo uno io ?? –

+1

@FelixK. Ho postato una risposta, poi ho pensato che non era quella giusta, cancellato, modificato mentre è stato eliminato e non cancellato. Una pratica comune, francamente. – GSerg

+0

Ehi, grazie compagno –

1

Il modo più semplice è quello di utilizzare il metodo FileSystem.MoveDirectory. Assicurati di aggiungere un riferimento al Microsoft.VisualBasic.dll:

using Microsoft.VisualBasic.FileIO; 
... 
// Merge D:\SourceDir with D:\DestDir: 
FileSystem.MoveDirectory("D:\\SourceDir", "D:\\DestDir", true /* Overwrite */); 
+0

Domanda è di unire la directory di origine con la directory di destinazione, MoveDirectory funzionerà in questo caso? Credo che MoveDirectory tenda a creare una nuova directory sulla destinazione e genererà un errore "Impossibile creare un file quando il file esiste già" se la directory esiste già. – kaushalparik27

+1

Perché credi se potessi provare? Unirà le directory, quindi finirai con un singolo DestDir con tutti i contenuti combinati. – Yarik