Les Snippets

Connexion

Copier un dossier et tout son contenu

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 20/04/2006 16:17:55 et initié par MorpionMx [Liste]
Date de mise à jour : 14/06/2008 17:47:30
Vue : 35448
Catégorie(s) : Fichier / Disque
Langages dispo pour ce code :
- C# 1.x, C# 2.x
- Javascript
- Windev
- VB 2005, VB.NET 1.x
- VB 2005, VB.NET 1.x
- VB6, VBA
- PHP 3, PHP 4, PHP 5



Langage : C# 1.x , C# 2.x
Date ajout : 20/04/2006
Posté par MorpionMx [Liste]
DateMAJ : 03/06/2006
//using System.IO;

public static void CopyDir(string sourceDir, string destDir) 
{
    DirectoryInfo dir = new DirectoryInfo(sourceDir);    if (dir.Exists) 
    {
        string realDestDir;
        if (dir.Root.Name != dir.Name) 
       {
           realDestDir = Path.Combine(destDir, dir.Name); 
           if (!Directory.Exists(realDestDir))
               Directory.CreateDirectory(realDestDir); 
       }
       else realDestDir = destDir;       
       foreach (string d in Directory.GetDirectories(sourceDir)) 
           CopyDir(d, realDestDir);
       foreach (string file in Directory.GetFiles(sourceDir)) 
       {

            string fileNameDest = Path.Combine(realDestDir, Path.GetFileName(file)); 
            //if (!File.Exists(fileNameDest))

            File.Copy(file, fileNameDest, true); 
       }
    }
}

Langage : Javascript
Date ajout : 21/04/2006
Posté par bultez [Liste]

function CopyDir(sourceDir,destDir,ecraser)
{
 var tmp = ecraser ? ecraser : false;
 var fso=new ActiveXObject("Scripting.FileSystemObject")
 fso.CopyFolder(sourceDir,destDir,tmp);
}
/*
le 3ème paramètre autorise ou non ( par défaut )
l'écrasement des fichiers déjà existants dans le
répertoire de destination.
*/
Remarque :
ne fonctionne qu'avec Windows + Internet Explorer.
Langage : Windev
Date ajout : 15/06/2006
Posté par Elian Lacroix [Liste]
fRepCopie(<RepertoireSource>, <RepertoireDestination>, frRécursif)
Langage : VB.NET 1.x , VB 2005
Date ajout : 15/11/2006
Posté par Drikce06 [Liste]
Dim UIOption As Microsoft.VisualBasic.FileIO.UIOption 
Private Sub CopieRepertoire(ByVal RepertoireSource As String, ByVal RepertoireDestination As String)
If My.Computer.FileSystem.DirectoryExists(RepertoireSource) Then


'si le répertoire de destination n'existe pas, celui-ci est créé

'voir l'aide pour plus de détails sur les options (progression, remplacer si fichier existe déjà ...)
My.Computer.FileSystem.CopyDirectory(RepertoireSource, RepertoireDestination, UIOption.OnlyErrorDialogs, FileIO.UICancelOption.ThrowException) 
Else
MsgBox("Le répertoire source n'existe pas") 
End If

End Sub

'Exemple d'utilisation
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
CopieRepertoire("C:\test", "C:\test2")
End Sub


Langage : VB.NET 1.x , VB 2005
Date ajout : 22/01/2007
Posté par Charles Racaud [Liste]
Private Sub CopyDirectory(ByVal sourceDirName As StringByVal destDirName As StringOptional ByVal overwrite As Boolean = False)
  If Not String.Equals(sourceDirName, destDirName) And System.IO.Directory.Exists(sourceDirName) Then
    If Not System.IO.Directory.Exists(destDirName) Then System.IO.Directory.CreateDirectory(destDirName)
    For Each Directory As System.IO.DirectoryInfo In New System.IO.DirectoryInfo(sourceDirName).GetDirectories()
      Call CopyDirectory(Directory.FullName, System.IO.Path.Combine(destDirName, Directory.Name), overwrite)
    Next
    For Each File As System.IO.FileInfo In New System.IO.DirectoryInfo(sourceDirName).GetFiles()
      If Not System.IO.File.Exists(System.IO.Path.Combine(destDirName, File.Name)) OrElse overwrite Then
        System.IO.File.Copy(File.FullName, System.IO.Path.Combine(destDirName, File.Name), overwrite)
      End If
    Next
  End If
End Sub
Langage : VB6 , VBA
Date ajout : 11/06/2008
Posté par PCPT [Liste]
DateMAJ : 14/06/2008
Private Const NOERROR As Long 0&
Private Const FO_COPY As Long &H2
Private Const FOF_ALLOWUNDO As Long &H40
Private Const FOF_CONFIRMMOUSE As Long &H2
Private Const FOF_FILESONLY As Long &H80 '  on *.*, do only files
Private Const FOF_MULTIDESTFILES As Long = &H1
Private Const FOF_NOCONFIRMATION As Long = &H10 '  Don't prompt the user.
Private Const FOF_NOCONFIRMMKDIR As Long = &H200 ' don't confirm making any needed dirs
Private Const FOF_RENAMEONCOLLISION As Long  = &H8
Private Const FOF_SILENT As Long &H4    ' don't create  progress/report
Private Const FOF_SIMPLEPROGRESS As Long = &H100 ' means don't show names of files
Private Const FOF_WANTMAPPINGHANDLE As Long  = &H20 ' Fill in SHFILEOPSTRUCT.hNameMappings
Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As AnyAs Long

Public Function CopyContentDirectory(ByVal sDirSrc As String, ByVal sDirDest As String, Optional ByVal lHandle As Long = 0,  Optional ByVal bIncludeSubFolders As Boolean  = True, Optional ByVal bShowWindowsProgressBox As Boolean  = False, Optional ByVal bRenameIfExists As Boolean = False,  Optional ByVal bShowWindowsAskActionBox As Boolean  = True) As Boolean
'sDirSrc                    -> répertoire  source
'sDirDest                   ->  répertoire destination
'lHandle                    -> handle appelant (peut rester à  0)
'bIncludeSubFolders         -> copie  récursive, donc avec les sous-dossiers et leur contenu
'bShowWindowsProgressBox    -> affiche la progressbox  windows
'bRenameIfExists            -> pas  d'écrasement, renomme directement les nouveaux fichiers du  dossier
'bShowWindowsAskActionBox   -> boite de  dialogue "renommer écraser oui tous etc...". NB : si FALSE, il n'y a pas non  plus de ProgressBox
    On Error GoTo Err_Handler
    Dim tFOS As SHFILEOPSTRUCT
    
'   formate  les chemins
    If bIncludeSubFolders Then
        If RightB$(sDirSrc, 2) = "\" Then sDirSrc = LeftB$(sDirSrc, LenB(sDirSrc) - 2)
    Else
        If Not (RightB$(sDirSrc, 2) = "\"Then sDirSrc = sDirSrc & "\"
        sDirSrc = sDirSrc & "*.*"
    End If
    If Not (RightB$(sDirDest, 2) = "\"Then sDirDest = sDirDest & "\"
    
'    structure
    With tFOS
        .hWnd = lHandle
        .wFunc = FO_COPY
        .pFrom = sDirSrc & vbNullChar
        .pTo = sDirDest & vbNullChar
        .fFlags = CInt(SetFOSFlag(bIncludeSubFolders, bShowWindowsProgressBox,  bRenameIfExists, bShowWindowsAskActionBox, False, True))
        .fAborted = False
        .hNameMaps = 0&
        .sProgress = vbNullChar
    End With
'   API /  retour
    CopyContentDirectory = (SHFileOperation(tFOS) =  NOERROR)
    
Err_Handler:
'   en IDE on peut avoir un message "Mémoire insuffisante" en fin  d'action malgré la réussite
    If Err.Number = Then CopyContentDirectory =  True
End Function
Private Function SetFOSFlag(Optional ByVal bIncludeSubFolders As Boolean  = True, Optional ByVal bShowWindowsProgressBox As Boolean  = False, Optional ByVal bRenameIfExists As Boolean = False,  Optional ByVal bShowWindowsAskActionBox As Boolean  = False, Optional ByVal bAllowUndo As Boolean = False,  Optional ByVal bMulti  As Boolean = True) As  Long
    SetFOSFlag = FOF_WANTMAPPINGHANDLE Or  FOF_NOCONFIRMMKDIR
    If Not bIncludeSubFolders Then SetFOSFlag = SetFOSFlag  Or FOF_FILESONLY
    If Not bShowWindowsProgressBox Then SetFOSFlag = SetFOSFlag  Or FOF_SILENT
    If bRenameIfExists Then SetFOSFlag = SetFOSFlag Or FOF_RENAMEONCOLLISION
    If Not bShowWindowsAskActionBox Then SetFOSFlag = SetFOSFlag  Or FOF_NOCONFIRMATION
    If bAllowUndo Then SetFOSFlag = SetFOSFlag  Or FOF_ALLOWUNDO
    If bMulti Then SetFOSFlag = SetFOSFlag Or FOF_MULTIDESTFILES
End Function

Remarque :
bReussite = CopyContentDirectory("C:\test", "D:\test", lHandle:=0, bIncludeSubFolders:=True, bShowWindowsProgressBox:=True, bRenameIfExists:=False, bShowWindowsAskActionBox:=False)
Langage : PHP 3 , PHP 4 , PHP 5
Date ajout : 22/10/2009
Posté par spinosaurus [Liste]
<?php 
// copie le contenu du repertoire $orig vers le repertoire $dest en le créant 
// copie tous les sous-reps de manière récursive 
// sous-entend qu'on a les droits d'écriture, bien sûr! 
function CopieRep ($orig,$dest) { 
   
  mkdir ($dest,0777); // à modifier si le rep cible existe déjà
  $dir = dir($orig); 
  while ($entry=$dir->read()) { 
    $pathOrig = "$orig/$entry"; 
    $pathDest = "$dest/$entry"; 
    // repertoire ->copie récursive
    if (is_dir($pathOrig) and (substr($entry,0,1)<>'.')) CopieRep ($pathOrig,$pathDest);     
   // fichier -> copie simple
   if (is_file($pathOrig) and ($pathDest<>'') and ($fp=fopen($pathOrig,'rb'))) { 
      $buf = fread($fp,filesize($pathOrig)); 
      $cop = fopen($pathDest,'ab+'); 
      fputs ($cop,$buf); 
      fclose ($cop); 
      fclose ($fp); 
    } 
  } 
  $dir->close(); 
} 
?> 
Remarque : 
Je n'avais pas trouvé cette fonction écrite de manière simple, alors je l'ai faite. Marche très bien sur le site dont je m'occupe. Pas essayée en PHP3 et 5, mais je ne pense pas qu'il y ait un problème, vue la simplicité du code. 


Snippets en rapport avec : Fichier, Dossier, Copier, Sous-dossier



Codes sources en rapport avec : Fichier, Dossier, Copier, Sous-dossier

{Visual Basic, VB6, VB.NET, VB 2005} [VB 2008] COMPARER DEUX RÉPERTOIRES
Bonjour à tous, Cette source permet de comparer deux dossiers et indique les fichiers qui sont pré...

{Visual Basic, VB6, VB.NET, VB 2005} CRÉATION D'UN FICHIER AUTOEXTRACTIBLE
Cette source a pour but de montrer comment créer un fichier autoextractible contenant plusieurs fich...

{ColdFusion} COPIE DE FICHIERS (CUSTOM TAG)
ce custom tag vous permet de copier tous les fichiers d'un répertoire vers un autre. ...

{Visual Basic, VB6, VB.NET, VB 2005} RENOMMER TOUS LES FICHIERS D'UN DOSSIER PAR CLIC DROIT
Renommer tous les fichiers d'un dossier par clic droit sur ce dossier. Un menu contextuel sur les do...

{Visual Basic, VB6, VB.NET, VB 2005} [VBS] IMG2HTML RECHERCHER LES DIFFÉRENTS TYPES D'IMAGES ET LES AFFICHER EN MINIATURES DANS UN TABLEAU EN HTML
C'est un VBScript pour rechercher des images avec les extensions "jpg,jpeg,gif,png,bmp,psd,png,tif" ...

{C / C++ / C++.NET} GESTION DE FICHIER ET DOSSIER + AUTRES
Petit code qui permet de gérer les fichiers et dossiers ainsi que d'autres fonctions. Je suis début...

{Visual Basic, VB6, VB.NET, VB 2005} JPG + ZIP = JPG ET ZIP
Arf : ma première source (publique) en .Net ! Sur une idée de jx53 sur le forum de VBFrance, voil...

{Javascript / DHTML} FAUX FURETEUR DE DOSSIER
Bon... mon titre n'est pas très explicite, je ne savais pas comment le décrire. En fait, il permet d...

{Visual Basic, VB6, VB.NET, VB 2005} UTILITAIRE WAV, MID ET MP3
Voilà un petit programme bien pratique que j'avais déjà posté mais qui a été supprimé pour manque d'...

{PHP} EFFACER DOSSIERS ET FICHIERS RÉCALCITRANTS
Qui n'a pas eu ce problème un jour, un dossier ou un fichier que votre client FTP ne peut pas efface...