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 :

Vider un répertoire


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut Vider un répertoire
    Bonjour,

    Je souhaite vider un répertoire :
    J'ai testé via les deux solutions proposés par le forum et la faq et dans les deux cas, ca ne fonctionne pas ...

    Premiere solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TStringList *Extensions2 = new TStringList; // On construit la liste des extensions
                                 Extensions2->Add(".*");
                                 Extensions2->Add("*.*");
                                 Extensions2->Add("*.*/0");
                            // Appel à notre méthode, avec pour liste des fichiers, les items de la ListBox.
                                 Search(tmp1, Extensions2, LBtempdocenvoidxcarebis->Items);
                                   for ( k = 0 ; k < (LBtempdocenvoidxcarebis->Items->Count) ; k++)
                                       {   if((DeleteFile(LBtempdocenvoidxcarebis->Items->Strings[k])) == true)
                                               ShowMessage("Message supprimé");
                                        }
    Le répertoire est bon car quand j essaye avec un type spécifique doc, txt, le travail est fait ( les fichiers de tel type ont été supprimé) donc le probleme est dans les extensions : je n ai pas trouvé comment faire en sorte d ajouter tous les fichiers :/


    Deuxieme méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                                       SHFILEOPSTRUCT FileOpStr;
                            ZeroMemory(&FileOpStr, sizeof(FileOpStr));
                            FileOpStr.hwnd = Application->Handle;
                            FileOpStr.fFlags = FOF_NOCONFIRMATION ;
                            FileOpStr.wFunc = FO_DELETE;
                            AnsiString tmp9 = tmp1 + "*.*\0";
                             ShowMessage(tmp9);
    // il m'affiche ici C:\Test\*.*
                            FileOpStr.pFrom = tmp9.c_str();
                            SHFileOperation(&FileOpStr);

    Et j ai une erreur :
    Impossible de supprimer Fichier : Impossible de lire à partir du fichier ou de la disquette source


    Merci d'avance pour votre aide !

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Pour la deuxième méthode, il doit y avoir un problème avec le buffer pFrom qu'il faut, il me semble, gérer comme un tableau de char (et non pas sous la forme c_str() ).
    pFrom doit se terminer par un double NUL : il faut un NUL après le NUL de la dernière chaîne.

    On peut le penser comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AnsiString N;
    N = N + "*.*";
    int n = N.Length() + 2; // nombre de char dans N + 2 NUL
    char *pFrom = new char[n]; // à la bonne dimension 
    strcpy(pFrom, N.c_str()); // copie N + 1 NUL
    // s'assurer d'avoir un dernier char NUL à la suite du NUL de la chaîne
    pFrom[n-1] = 0; 
     
    //..
    delete [] pFrom;
    A plus !

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut Djang0
    Regarde ce lien il repond peu etre a ton attente

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    J'ai déjà lu ce topic Blondelle
    mais je ne préfère pas passer par une commande dos pour avoir le renvoi du message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if((DeleteFile(LBtempdocenvoidxcarebis->Items->Strings[k])) == true)
                                               ShowMessage("Message supprimé");
    Bien sur, une fois le code fonctionnel, le showMessage sera remplacé par autre chose

    Sinon henderson, merci pour ton aide, j'ai essayé ta méthode mais rien ne se passe tous mes fichiers y sont encore

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Salut Djang0

    Tu as repris telle quelle la fonction Search de la FAQ ??

    Elle compare l'extension de chaque fichier trouvé avec les extensions passées en paramètres. Donc c'est normal que quand tu passes des extensions, elle les traite.
    Modifie la fonction Search pour virer le paramètre "TStringList * Extensions" et les traitements correspondants, et ça devrait mieux correspondre à ce que tu veux faire, non ??

    A+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    J'ai pris toutes les extensions des fichiers qui pouvaient poser problème et je les ai ajouter. Ensuite je supprime les fichiers un par un avec DeleteFile et si y en a un qui est en cours d utilisation, l'utilisateur en est averti.

    Merci pour votre aide

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

Discussions similaires

  1. Répertoire caché
    Par KUBITUS dans le forum Delphi
    Réponses: 30
    Dernier message: 13/04/2007, 07h19
  2. [VBS]Vider un répertoire avec la commande RUNAS
    Par Alphaz dans le forum VBScript
    Réponses: 3
    Dernier message: 20/06/2006, 17h43
  3. sélectionner un répertoire
    Par estelle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 02/09/2005, 04h53
  4. Vider le buffer du clavier
    Par flavien tetart dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 12/07/2002, 08h35
  5. Comment vider un dossier ?
    Par Zinoc dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/06/2002, 14h14

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