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 :

TSHFILEOpstruct et UnicodeString avec XE2


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Par défaut TSHFILEOpstruct et UnicodeString avec XE2
    Bonjour,
    j'ai utilisé, dans des versions précédentes de C++ Builder, la structure TSHFIlieOpstruct pour copier des fichiers.

    Je voudrais utiliser cette structure pour effacer des fichiers, afin d'éviter une destruction irrémédiable des fichiers (errare humanum est).

    Je ne parviens pas à utiliser le nom du fichier usNomFichier, qui est un UnicoideString, pour l'affecter à pFrom qui demande un PChar ou un
    wchar_t*.

    J'ai cherché dans la FAQ C++Builder, ainsi que dans celle de Delphi.

    Quelqu'un connait-il le remède ?

    Merci.

  2. #2
    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 Pasqualini

    Un lien qui parle de ton probleme


  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Un code pouvant t'inspirer !

    pFrom doit contenir 4 zéros à la fin, 2 pour la fin de chaine Unicode, 2 autres pour la fin de tableau de chaine

    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
    void TCensure::DeleteTemporaryFiles()
    {
      TFileName TempPath = GetTemporaryPath();
     
      if ( ! TempPath.IsEmpty())
      {
        TFileName TempMask = TempPath + "*.*";
     
        int Len = TempMask.Length();
        int Size = Len + 1; // +1 pour le caractère zéro terminal de chaine
     
        wchar_t* pFormArray = new wchar_t[Size + 1]; // +1 pour le caractère zéro terminal de tableau de chaine
        try
        {
          StrCopy(pFormArray, TempMask.c_str());
          pFormArray[Size] = 0; // Indique la fin du tableau de chaine
     
          SHFILEOPSTRUCTW DeleteCriteria;
          ZeroMemory(&DeleteCriteria, sizeof(DeleteCriteria));
          DeleteCriteria.wFunc = FO_DELETE;
          DeleteCriteria.pFrom = pFormArray;
          DeleteCriteria.fFlags = FOF_FILESONLY | FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI;
     
          SHFileOperationW(&DeleteCriteria);
        }
        __finally
        {
          delete [] pFormArray;
        }
      }
    }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Par défaut
    Merci,
    voilà, ce que j'ai tenté :
    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
    UnicodeString usNom = eRepertoire->Text + eNomFichier->Text;
      int Size = usNom.Length();
      wchar_t* wcFrom = new wchar_t[Size + 1];
      StrCopy(wcFrom, usNom.c_str());
      wcFrom[Size] = 0;
      SHFILEOPSTRUCTW ShOps;
      ZeroMemory(&ShOps, sizeof(ShOps));
      try
      {
    	ShOps.hwnd = Application->Handle;
    	ShOps.wFunc = FO_DELETE;
    	ShOps.pFrom = wcFrom;
    	ShOps.fFlags = FOF_FILESONLY | FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI;
    	SHFileOperationW(&ShOps);
      }
     
      __finally
      {
    	delete [] wcFrom;
      }
    Le fichier n'est pas effacé.
    Qu'y a-t-il de faux ?

  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
    Hello,

    Les fonctions de l'API Windows ont un code de retour, celui de SHFileOperation devrait te donner un indice (cf. MSDN)

    Sinon, il y a bien un "\" à la fin de eRepertoire->Text ou au début de eNomFichier->Text ??

  6. #6
    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
    Un lien qui va peut etre t'aider

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2012, 17h49
  2. chemins de projets et unité avec XE2
    Par Pascal Fonteneau dans le forum EDI
    Réponses: 5
    Dernier message: 16/04/2012, 18h50
  3. Des applications qui ont de la gueule avec XE2
    Par Guyt54 dans le forum C++Builder
    Réponses: 18
    Dernier message: 14/04/2012, 20h15
  4. Problème événement TIdUDPServer avec XE2
    Par Guyt54 dans le forum C++Builder
    Réponses: 1
    Dernier message: 04/04/2012, 18h20
  5. Problème EmbeddedWB avec XE2
    Par Teddy dans le forum Débuter
    Réponses: 10
    Dernier message: 28/12/2011, 18h43

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