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++ Discussion :

Effacer un fichier caché


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut Effacer un fichier caché
    Bonjour à tous,

    (Quasiment) Tout est dans le titre .

    Je créer un fichier temporaire auquel j'associe un attribut pour le cacher.
    A la fin de mon programme, je souhaite supprimer ce fichier.

    Seulement je n'y arrive pas. Dans la msdn, il est spécifié que remove() ne va pas pouvoir supprimer un fichier en read-only mais rien n'est précisé pour un fichier caché.

    J'ai testé avec remove() et DeleteFile(), meme resultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //creation
    string toto="name";
    ofstream* _oStlFile=new ofstream(toto.c_str(), ios::binary);
    SetFileAttributes(toto.c_str(),FILE_ATTRIBUTE_HIDDEN);
     
    //suppression
    int dbg=1;
    dbg=remove(toto.c_str());//-1 = error
    dbg=DeleteFile(toto.c_str());//0 = error
    Quand je supprime la ligne "SetFileAttributes...", je peux le supprimer.

    Une solution crado serait de retirer l'attribut jsute avant d'effacer le fichier mais bon ça ne me plait guère. De plus, je ne sais même pas comment faire .

    Si quelqu'un a la solution...

    Merci par avance.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Pourquoi ne pas utiliser les fonctions Win32 pour la gestion des fichiers temporaires (cf MSDN) plutôt que de cacher ton fichier ?

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut
    Oui pas bete
    Je ne connaissais pas cette fonction.

    Par contre j'aurais aimé avoir une précision.
    J'ai fait un rapide test de performances au niveau de l'écriture entre ofstream::write() et WriteFile() sur float[100 000] répétée 50 fois.

    J'ai constaté que WriteFile() est extrêmement rapide (~5fois plus rapide) par rapport la méthode des streams.

    Est ce qu'on peut me confirmer ce constat voire m'expliquer un peu ?
    Je pensais l'écriture (de donnée binaires dans mon cas) avec un stream la plus rapide.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par azboul Voir le message
    Est ce qu'on peut me confirmer ce constat voire m'expliquer un peu ?
    Je pensais l'écriture (de donnée binaires dans mon cas) avec un stream la plus rapide.
    Il peut y avoir une variabilité entre les différentes implémentations de la STL : donc, quel est ton compilo pour faire ces tests ? Et as-tu bien fait des tests en mode release ?
    Sinon, cf ces discussions : ici et ici et ici.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 116
    Points : 62
    Points
    62
    Par défaut
    Ok très interessant, merci pour ces liens.
    Je suis sous Xp avec Visual Studio 2008 mais en debug du coup les (rapides) tests que j'ai effectués sont moins parlants que ceux de tes liens.
    L'écriture a l'air tout de meme plus lente avec un stream c'est pourquoi je vais explorer ta piste.

    J'ai essayé de lire le contenu (binaire) d'un fichier créer temporairement mais sans succès. Avec GetLastError(), j'obtiens que mes erreurs sont du genre "Chemin d'accès introuvable".

    D'ou celà vient-il ?
    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
     
    //creation
    hTempFile = CreateFile((LPTSTR) szTempFileName, // file name 
                               GENERIC_READ | GENERIC_WRITE,       
                               0,                    // do not share 
                               NULL,                 // default security 
                               CREATE_ALWAYS,        // overwrite existing
                               FILE_ATTRIBUTE_NORMAL,// normal file 
                               NULL);                // no template 
     
     
    // ecriture
    int nbelms_init=100;
    fSuccess = WriteFile(hTempFile, (char*)&nbelms_init, sizeof(int), &dwBytesWritten, NULL); //fSuccess=1
     
    //lecture
    int nbelms_res=0;
    bool chk1 = ReadFile(hTempFile, (char*)&nbelms_res, sizeof(int), &dwBytesRead, NULL);
    //chk1=true mais nbelms_res=0 et GetLastError()->"Chemin d'accès introuvable"

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Mets un point d'arrêt à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    hTempFile = CreateFile((LPTSTR) szTempFileName, // file name 
                               GENERIC_READ | GENERIC_WRITE,       
                               0,                    // do not share 
                               NULL,                 // default security 
                               CREATE_ALWAYS,        // overwrite existing
                               FILE_ATTRIBUTE_NORMAL,// normal file 
                               NULL);                // no template
    Vérifie la valeur de szTempFileName. Le nom de fichier est-il valide ? Le répertoire existe-t-il ? As-tu les droits d'écriture dessus ?

    p.s. : des tests de perfs en mode debug c'est très rarement pertinent.

Discussions similaires

  1. [XL-2007] Lien vers un fichier effacé : problème de cache ?
    Par Graoum dans le forum Excel
    Réponses: 4
    Dernier message: 19/06/2012, 17h58
  2. Récupérer fichier caché effacé
    Par zafo dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 21/05/2006, 11h58
  3. [VB6] supprimer fichier caché
    Par camyo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/07/2004, 13h45
  4. [API WIN 32]effacer un fichier
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 30/01/2004, 13h51
  5. Ouvrir (fopen) un fichier caché
    Par shef dans le forum C
    Réponses: 2
    Dernier message: 09/09/2002, 09h06

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