IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Deplacer un repertoire sur un autre disque


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Deplacer un repertoire sur un autre disque
    Bonjour,
    Je voudrai deplacer un dossier (repertoire) complet sur un autre lecteur. J'avais pense utiliser movefile, mais il ne deplace que sur le meme lecteur. Y a t-il une fonction qui ferait ca ou avez vous des idees pour cela. Il faudrait aussi si c'est possible que si le deplacement est partiel de pourvoir le refaire a nouveau. Comme le fait l'explorateur windows lorsque l'on deplace un dossier.

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    La fonction CopyFile pourrait peut etre t'interrésser, je ne connait pas ces propriétés exactes (changement de lecteur,...), mais cherche toujours pour voir si ca te va.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  3. #3
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    si tu travailles sous windows tu peux utiliser la commande dos "xcopy" en parametre dans la fonction system.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("xcopy RepertoireSource RepertoireDestination quelques-parametres");
    des infos sur xcopy : ici

    je l'ai deja utilisé pour deplacer un dossier et ca marche bien mais je n'est pas mon code source pour le moment.
    regarde deja si ca t'interrese. je ne sais pas si tu peut changer de lecteur.
    à mon avis oui.

  4. #4
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    je viens de verifier (avec l'editeur de commandes "cmd"), a priori ca marche d'un lecteur vers un autre. tu m'as peut etre meme pas besoin des parametres supplementaire.
    voila donc si t'es sous windows tu peux utiliser cette methode

  5. #5
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut J'aurai voulu plus que cela
    Citation Envoyé par damienlann
    je viens de verifier (avec l'editeur de commandes "cmd"), a priori ca marche d'un lecteur vers un autre. tu m'as peut etre meme pas besoin des parametres supplementaire.
    voila donc si t'es sous windows tu peux utiliser cette methode
    Merci pour ton aide. J'avais deja pense a cela.Mais une fenetre dos qui s'affiche a chaque copy c'est pas tres jolie. Pour le deplacement effectivement je peux copier puis effacer si cela a fonctionne. Mais y a t-il une fonction api de windows qui fait ce deplacement, comme le fait l'exploreur windows. Si quelqu'un
    a des idees, je suis prenneur. En tout cas merci a tout ceux qui on repondu.

  6. #6
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    nan plus d'idée...
    A mon avis l'explorer windows utilise la fonction copy (mais je suis pas sur a 100%) sauf qu'elle arrive a ne pas ouvrir la fenetre dos.

    Sinon tu peux toujours creer un nouveau dossier ou tu le souhaites et copier l'ensemble de tes fichiers. c'est pas top et pas optimisé je sais...

  7. #7
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Une petite piste peut etre :
    http://www.developpez.net/forums/showthread.php?t=14175

    lanonyme

  8. #8
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Salut,
    Au pire, il y la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HRESULT CopyFolder(LPCIID lpSrcInterface, LPVOID lpSrcFolder, ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, LPVOID lpDestFolder, LPSTR lpszNewFolderName, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags)
    issu des APis....surement pas facile a utiliser le premier coup, il y a apparement dans ces paramètres le moyen d'indiquer que le dossier est a déplacer et non a copier...
    ULONG ulFlags : FOLDER_MOVE

    Bon courage,
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  9. #9
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Deplacement de dossier
    Bonjour,
    J'avais essaye de faire une fonction pour copy les fichiers, puis effacer les dossiers. La copie marche bien, mais les dossiers ne sont pas supprime. Voici mon source. Il y a forcement une erreur mais je ne la vois pas. Quelqu'un a t-il une idee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "UnitTestMoveFolder.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
     
    TFormXMoveFolder *FormXMoveFolder;
    bool QuitterXMoveFolder=false;
    char DestFolder[1000];
     
     
    //---------------------------------------------------------------------------
    __fastcall TFormXMoveFolder::TFormXMoveFolder(TComponent* Owner)
        : TForm(Owner){}
     
    void __fastcall TFormXMoveFolder::FormCreate(TObject *Sender)
    {
    MEMOSCREEN->Clear();
    xMoveFolder("c:\\data\\line5","d:\\titi");
    }
    //---------------------------------------------------------------------------
    void __fastcall TFormXMoveFolder::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
     QuitterXMoveFolder = true;
    }
     
    // --------------------------------------------------------------------------
    // ----------- XmoFile Deplacements des dossiers              ---------------
    // --------------------------------------------------------------------------
     void  __fastcall TFormXMoveFolder::xMoveFolder(char FolderSource[],char FolderDest[])
    {
    char CurrentDrivePath[1000];
    lstrcpy(DestFolder,FolderDest);
    if (FolderSource[lstrlen(FolderSource)-1]!='\\') lstrcat(FolderSource,"\\");
    if (*(FolderSource+1)!=':')
       {
       DWORD lplength;
       if (!GetCurrentDirectory(lplength,CurrentDrivePath)) lstrcpy(CurrentDrivePath,"c:");
          else
          CurrentDrivePath[2]=NULL;
       lstrcat(CurrentDrivePath,FolderSource);
       lstrcpy(FolderSource,CurrentDrivePath);
       }
    //Pointertmp=(FolderSource+2);
    Char TMPDestFolder[1000];
    lstrcpy(TMPDestFolder,DestFolder);lstrcat(TMPDestFolder,(FolderSource+2));
    int length=lstrlen(TMPDestFolder);
    for (int i=0; i<length; i++)
         {
          if (TMPDestFolder[i]=='\\')
              {
               lstrcpyn(CurrentDrivePath,TMPDestFolder,(i+1));
               CreateDirectory(CurrentDrivePath,NULL);
              }
         }
     QuitterXMoveFolder=false;
     xScanMoveFolder(FolderSource);
     RmDir(FolderSource);
    }
    //---------------------------------------------------------------------------
    // --------------------------------------------------------------------------
    // ----------- Fonction récursive des placements des dossiers ---------------
    // --------------------------------------------------------------------------
     void  __fastcall TFormXMoveFolder::xScanMoveFolder(char FolderSource[])
    {
     char CopySource[1000];
     char CopyDest[1000];
     char CopyFile[1000];
     lstrcpy(CopySource, FolderSource);
     WIN32_FIND_DATA w32fd;
     char Nom[1000];
     lstrcpy(Nom, CopySource); lstrcat(Nom, "*.*");
     HANDLE h = FindFirstFile(Nom, &w32fd);
     bool res = true;
     if (h!=INVALID_HANDLE_VALUE)
     {
      while (res && !QuitterXMoveFolder)
      {
       if (lstrcmp(w32fd.cFileName, "..") && lstrcmp(w32fd.cFileName, "."))
       {
        if (w32fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
        {
         // Traitement des Dossiers
         char N[1000];
         lstrcpy(N, CopySource); lstrcat(N, w32fd.cFileName);
         lstrcpy(CopyDest,DestFolder);lstrcat(CopyDest,(N+2));
         MEMOSCREEN->Lines->Add(AnsiString("creat  ")+  CopyDest);
         MkDir(CopyDest);
         lstrcat(N, "\\");
         xScanMoveFolder(N);
         lstrcpyn(CopyDest,N,(strlen(N)));
         //RemoveDirectory(CopyDest);
         //RmDir("c:\\data\\line5\\FOERSTER\\empty\\2\\25\\lot2"); la sa marche
         AnsiString toto=CopyDest;
         RmDir(toto);                   // Ici ca me marche pas
         RemoveDirectory(toto.c_str());
         MEMOSCREEN->Lines->Add(AnsiString("del")+ CopyDest+AnsiString("del"));
     
        }
        else
        {
        // Traitement des Fichiers
        strcpy(CopyFile, CopySource);
        lstrcat(CopyFile, w32fd.cFileName);
        lstrcpy(CopyDest,DestFolder);lstrcat(CopyDest,(CopyFile+2));
        MEMOSCREEN->Lines->Add(AnsiString("fichsource  ")+ CopyFile);
        MEMOSCREEN->Lines->Add(AnsiString("fichDest  ")+ CopyDest);
        MoveFile(CopyFile,CopyDest);
        }
       }
       res = FindNextFile(h, &w32fd);
       Application->ProcessMessages();
      }
     }
    }

  10. #10
    Candidat au Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Deplacement de dossier SHFileOperation (Merci a Lanomyme
    Je suis toujours interesse pourquoi mon prog si dessus ne fonctionne pas.
    Mais en fait j'en suis venue a utiliser SHFileOperation qui fonctionne tres bien.
    Pour mon appli je creer d'abord les sous repertoire pour les sous repertoire qui ne seront pas deplace. Ceci afin de garder la meme arboresence sur la destination. Ensuite je met dans un queue les dossiers a deplacer et dans un thread j'utilise la fonction SHFileOperation pour vider le tampon plus d'autre petite chose.
    En tout Cas merci a tout le monde pour cette aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SHFILEOPSTRUCT FileOpStr;
    TMPVarFolder=TamponMoveFolder.front()+ AnsiString("\0"); // Nom du dossier a deplacer
    ZeroMemory(&FileOpStr,sizeof(FileOpStr)); // Taille Memoire
    FileOpStr.hwnd=Application->Handle; // Handle sur la fenetre
    FileOpStr.fFlags=FOF_NOCONFIRMATION | FOF_SILENT; // Repond tjs oui et en mode silencieux
    FileOpStr.wFunc=FO_MOVE; // Deplacement
    FileOpStr.pFrom=TMPVarFolder.c_str(); // Depuis Ou
    TMPVarFolder[1]=Drives; // construit la dest
    FileOpStr.pTo=TMPVarFolder.c_str(); // Vers Ou
    if (!SHFileOperation(&FileOpStr)) // Effectue le deplacement
    TamponMoveFolder.pop();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ouvrir un repertoire sur un autre lecteur
    Par grommerch dans le forum VBA Access
    Réponses: 11
    Dernier message: 28/08/2007, 17h18
  2. déplacer une base de données sur un autre disque ?
    Par caballero dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/07/2007, 13h02
  3. Deplacement de tables sur un autre tablespace ?
    Par D_light dans le forum Administration
    Réponses: 2
    Dernier message: 23/05/2007, 11h55
  4. Execution d'un .bat sur un autre disque
    Par n8ken dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2006, 15h03
  5. Récupérer des données sur un autre disque
    Par julien.63 dans le forum Administration système
    Réponses: 15
    Dernier message: 16/10/2006, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo