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 :

Créer un fichier caché sous Windows


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Créer un fichier caché sous Windows
    Bonjour,

    Je code en Qt et je cherche une fonction qui pourrait créer ou modifier les attributs d'un fichier (dans mon cas "Path.dat").
    Je n'ai pas trouvé.

    Par contre, je suis tombé sur une fonction Windows : SetFileAttributes(fichier, option).

    Ce fichier serait dans le répertoire courant.
    Le problème c'est que cette fonction échoue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetFileAttributes((LPCTSTR)"Path.dat", FILE_ATTRIBUTE_HIDDEN)
    Est-ce que quelqu'un saurait pourquoi ?

    Je vous remercie.

  2. #2
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Essaye déjà de sécuriser ta chaine de caractère en ajoutant _T.
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    je n'ai pas compris, tu le places où _T ?

    J'ai essayé plusieurs possibilités,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetFileAttributes((LPCTSTR) _T("Path.dat"), FILE_ATTRIBUTE_HIDDEN)
    J'ai rajouté l'include correspondant, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <tchar.h>
    mais mon fichier à la fin, n'est toujours pas caché...

    Tu as une solution ?

  4. #4
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Dans le code que tu as linké le _T est bien placé
    En effet un LPCTSTR est un pointeur sur un TCHAR, d'où la nécessité d'ajouter le _T par sécurité (car si tu ne compiles pas en ANSI tu vas avoir des problèmes ).

    Pour en revenir à ton problème de fichier caché, c'est un problème de programmation Win32 en C++ et non un soucis lié à Qt : je déplace ton post dans le forum adéquat pour plus de visibilité.
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je te remercie pour ton petit plus.

    Je relance la question.
    Je sais que la fonction échoue,

    Est-ce que quelqu'un peut me dire si j'oublie quelque chose ?

  6. #6
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Généralement, l'API Win32 n'apprécie pas trop les chemins relatifs, je te conseille donc de donner un chemin absolu, de plus il faut que tu vérifies que ton fichier existe.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    J'ai testé l'existence du fichier, il est bien vu.

    J'ai essayé en donnant le chemin absolu, ca ne marche toujours pas...

  8. #8
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Que te renvoies la fonction GetLastError ?
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Généralement, l'API Win32 n'apprécie pas trop les chemins relatifs, je te conseille donc de donner un chemin absolu, de plus il faut que tu vérifies que ton fichier existe.
    Ha ? L'API Win32 des fichiers gère très bien les chemins relatifs. Par contre, si il y a un problème, la cause est souvent chez l'utilisateur ou le développeur qui a "oublié" que le chemin est relatif par rapport au répertoire courant. Le répertoire courant qui se récupère avec la fonction GetCurrentDirectory() de l'API Win32.

    Pour revenir au problème initial, sur un système de fichiers Windows NTFS cohabitent 2 systèmes de droits. Les droits historiques hérités du DOS et les droits NTFS.

    Les droits historiques hérités du DOS se modifient avec la fonction SetFileAttributes(). Les droits NTFS se modifient avec la fonction SetSecurityInfo().

    Il faut savoir aussi que les droits DOS ne peuvent pas être plus grands/permissifs que les droits NTFS. A mon avis, ces droits devraient être oubliés maintenant.

    Donc la question est : as tu le droits (NTFS) de modifier le fichier que tu veux modifier(droits sur le fichier et sur le répertoire qui contient ce fichier).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Alors GetLastError () me renvoie 2.

    Concernant SetSecurityInfo (handler, typeobjet, securite), je ne vois pas du tout comment l'utiliser :s ...

  11. #11
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Le code d'erreur 2 correspond à "Le fichier spécifié est introuvable." donc c'est plus un problème de nom de fichier et de localisation dans l'arborescence que de sécurité.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  12. #12
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Ha ? L'API Win32 des fichiers gère très bien les chemins relatifs
    Je confirme avoir déjà rencontré des problèmes de chemin relatif avec certaines fonctions de l'API Win32 (alors qu'avec d'autres je n'avais pas de problème), pas forcément pour cette fonction là mais j'ai maintenant pris l'habitude de passer tous mes chemins en absolu (avec la fonction GetCurrentDirectory tu cites)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je vais adopter la methode du chemin absolu.
    Alors, j'ai plusieurs questions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int Taille = 200;
    TCHAR Buffer[Taille];
    DWORD dwRet = GetCurrentDirectory(Taille, Buffer);
    std::cout << "Taille = " << dwRet << std::endl;
     // Ce qui donne Taille = 50
    Le code précédent m'indique que la fonction GetCurrentDirectory() fonctionne.
    De plus, si j'effectue un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetFileAttributes((LPCTSTR) _T(Buffer), FILE_ATTRIBUTE_HIDDEN)
    le dossier devient un fichier caché.

    A présent:

    Comment afficher ce que contient buffer ?

    En effet, j'aimerais savoir comment concaténer à buffer le fichier du repertoire (toto.txt). Le code suivant semble ne pas marcher: (L'affichage me permettrait de m'assurer que la concaténation se passe bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memcpy(Buffer+sizeof(Buffer), "/toto.txt", 9);
    je vous remercie

  14. #14
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Windows gère très bien les chemins relatifs. Mon hypothèse est que, comme l'indique le numéro d'erreur, le fichier n'existe pas. Par exemple, tu peux être persuadé de l'existence du fichier "Path.dat" parce que tu vois un fichier nommé "Path.dat" dans l'explorateur alors que c'est peut-être Path.dat.dat, voire autre chose. Je te conseille d'afficher les extensions des fichiers dans l'explorateur pour ne pas te tromper. J'ai testé le code suivant et je n'ai eu aucun problème :
    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
    #include <iostream>
    #include <string>
    #include <windows.h>
     
    #define TESTFILE "toto.txt"
    #define FULL_PATH_VERSION FALSE
     
    int main()
    {
        char buffer[MAX_PATH];
     
        GetCurrentDirectory(sizeof(buffer), buffer);
        std::string path(buffer);
        std::cout << "CurrentDirectory : " << path << std::endl;
     
        if (FULL_PATH_VERSION) {
            if (*path.rbegin() != '\\')
                path.append("\\");
            path.append(TESTFILE);
        } else {
            path = TESTFILE;
        }
     
        std::cout << "TestFile : " << path << std::endl;
     
        if (!SetFileAttributes(path.c_str(), FILE_ATTRIBUTE_HIDDEN))
        {
            DWORD dwError = GetLastError();
            FormatMessage(
                FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                dwError,
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                buffer,
                sizeof(buffer),
                NULL
            );
            CharToOemBuff(buffer, buffer, sizeof(buffer));
            std::cout << "Err no. " << dwError << " : " << buffer << std::endl;
        }
     
        return 0;
    }

Discussions similaires

  1. créer un fichier Jar sous eclipse
    Par gagalive dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 18/07/2006, 11h46
  2. créer un fichier caché
    Par boss_gama dans le forum ASP
    Réponses: 1
    Dernier message: 10/07/2006, 11h03
  3. Réponses: 4
    Dernier message: 18/05/2006, 15h00
  4. [DOM] Créer un fichier XML sous une forme bien précise
    Par LaseLiep dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 09/06/2005, 18h05
  5. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29

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