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 :

Copie d'un Répertoire


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Par défaut Copie d'un Répertoire
    Bonjour,

    encore une fois, je fais appel à vos connaissances...

    voici mon problème :
    j'ai besoin de copier le contenu d'un répertoire dans un autre afin d'effectuer des modifications sur les fichiers copiés.

    j'utilise donc la fonction présentée ici (code de blondelle) :
    http://www.developpez.net/forums/d43...r/#post2602788

    ce qui me donne le code suivant :
    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
     
    //---------------------------------------------------------------------------
    void __fastcall TufmImages::save_finalCanClose(TObject *Sender, bool &CanClose)
    {
    	// copie complète du répertoire source dans le répertoire final
     
    	AnsiString tmpSource = ExtractFileDir(fichierSource);
    	AnsiString tmpFinal = ExtractFileDir(save_final->FileName);
     
    	tmpSource += "\0";
    	tmpFinal += "\0";
     
    //	ShowMessage(tmpSource);
    //	ShowMessage(tmpFinal);
     
    	CopyDir(tmpSource.c_str(), tmpFinal.c_str());
    }
    //---------------------------------------------------------------------------
    void TufmImages::CopyDir(char* SourceDir, char* DestDir)
    {
    //	SourceDir = "C:\\tmp\\test\0";
    //	DestDir = "C:\\tmp\\new\0";
     
    	SHFILEOPSTRUCT FileOpStr;
    	ZeroMemory(&FileOpStr, sizeof(FileOpStr));
    	FileOpStr.hwnd = NULL;
    	FileOpStr.wFunc = FO_COPY;
    	FileOpStr.pFrom = SourceDir;
    	FileOpStr.pTo = DestDir;
    	SHFileOperation(&FileOpStr);
    }
    //---------------------------------------------------------------------------
    mais j'ai l'erreur suivante :
    Cannot copy file: Cannot read from the source file or disk.
    avez - vous une idée d'où peut provenir cette erreur?? sachant que si je retire les // ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //	SourceDir = "C:\\tmp\\test\0";
    //	DestDir = "C:\\tmp\\new\0";
    mon code fonctionne (mais ce n'est pas le but...)


    merci encore une fois pour votre aide
    à bientôt

  2. #2
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Je sais pas d'ou peut venir ton problème, mais as-tu vérifé si la valeur que prenait tmpSource et tmpFinal lors de l'éxécution de ton code était bonne?

  3. #3
    Membre éclairé Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Par défaut
    woahoo jamais vu de réponse aussi rapide merci...

    oui les valeurs "m'ont l'air" correctes

    ShowMessage(tmpSource); donne :
    "C:\tmp\test"

    ShowMessage(tmpFinal); donne :
    "C:\tmp\new

  4. #4
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Peut-être faut-il doubler les antislash dans tes ansiString avant d'appeler la fonction CopyDir.

  5. #5
    Membre très actif Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 923
    Par défaut
    Je ne vois pas bien l'interêt de tes 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tmpSource += "\0";
    tmpFinal += "\0";
    puisque le zéro terminal sera ajouté par c_str() au moment du passage des argument à la fonction

  6. #6
    Membre éclairé Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Par défaut
    Citation Envoyé par nirgal76 Voir le message
    Je ne vois pas bien l'interêt de tes 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tmpSource += "\0";
    tmpFinal += "\0";
    puisque le zéro terminal sera ajouté par c_str() au moment du passage des argument à la fonction
    ah merci je ne le savais pas...

    j'essaye de les enlever et je te redis


    Citation Envoyé par edition du message par mangacker
    ça ne change rien que je laisse ou pas ces lignes...

    elles sont là (comme indiqué par blondelle je crois) pour indiquer qu'il faut copier le contenu du répertoire et pas le répertoire lui-meme

    si c'est pas pour ça, ça serait cool de m'expliquer ^^

    a+

  7. #7
    Membre éclairé Avatar de Mangacker
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 452
    Par défaut
    c'est ce à quoi j'avais pensé mais comme la valeur vient directement d'une fonction ExtractFileDir je pensais que c'était ok.

    de plus, si j'essaye de les doubler à l'aide de la fonction AnsiReplaceText

    ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiReplaceText("C:\tmp\test\0", "\\", "\\\\");
    malheureusement là j'obtiens une chaîne bizarre :

  8. #8
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par Mangacker Voir le message
    c'est ce à quoi j'avais pensé mais comme la valeur vient directement d'une fonction ExtractFileDir je pensais que c'était ok.
    C'est ok

    Citation Envoyé par Mangacker Voir le message
    de plus, si j'essaye de les doubler à l'aide de la fonction AnsiReplaceText

    ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiReplaceText("C:\tmp\test\0", "\\", "\\\\");
    malheureusement là j'obtiens une chaîne bizarre :
    La par contre tu essaye un chaine brut que tu met toi directement dans ton code, du coup il faut doubler tes antislash, de plus comment veut tu trouver des double antislash dans une chaine en dur ou tu voit bien qu'il n'y en as pas

  9. #9
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    Citation Envoyé par Mangacker Voir le message
    c'est ce à quoi j'avais pensé mais comme la valeur vient directement d'une fonction ExtractFileDir je pensais que c'était ok.

    de plus, si j'essaye de les doubler à l'aide de la fonction AnsiReplaceText

    ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiReplaceText("C:\tmp\test\0", "\\", "\\\\");
    malheureusement là j'obtiens une chaîne bizarre :
    Alors là je comprends pas trop ce résultat....En plus j'ai rien sous la main pour tester

    Essaye de faire ta propre fonction pour ajouter l'antislash peut-être...ou attends quelqu'un de plus éxpérimenté que moi

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

Discussions similaires

  1. [DOS] Batchfile copie d'un répertoire récent
    Par Erakis dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/11/2006, 15h15
  2. Copie récursive de répertoire
    Par Furius dans le forum Langage
    Réponses: 21
    Dernier message: 11/01/2006, 19h25
  3. Batch : copy d'un répertoire avec des espaces
    Par krfa1 dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 26/10/2005, 12h47
  4. [VBScript] (débutant) Copie d'un répertoire réseau
    Par benoitB dans le forum VBScript
    Réponses: 11
    Dernier message: 28/09/2005, 16h13
  5. Fonctions permettant la copie d'un répertoire
    Par benj63 dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2004, 08h41

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