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 :

écriture dans un fichier sous Vista


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut écriture dans un fichier sous Vista
    Bonjour à tous,
    Je souhaite pouvoir lire/écrire dans un fichier se situant dans C:/Program Files/.../... Pour ce qui est de la lecture, aucun problème avec fopen() mais en ce qui concerne l'écriture, impossible d'ouvrir de fichier en mode écriture avec fopen(). Le problème vient sans doute des permissions sous Vista puisque le fopen() en mode écriture fonctionne dans les répertoires de l'utilisateur courant (mes documents, bureau etc...).
    J'ai tenté d'utiliser <fstream> ou <ofstream> mais le problème reste exactement le même. Je n'ai trouvé aucune documentation relative à ce problème c'est pourquoi je fais appel à vous

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ben en effet, un utilisateur normal n'a pas le droit de modifier un fichier dans Program Files, sauf si on lui en donne explicitement le droit (comme c'est le cas quand on installe un vieux jeu qui met ses sauvegardes dans Program Files).

    J'ignore si ta version de Vista offre une UI pour ajuster les droits, mais au pire tu peux le faire avec l'outil en ligne de commande CACLS (attention à ce que tu fais, en pas oublier le paramètre /E dans la plupart des cas).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Merci pour cette réponse rapide!

    Pour l'instant je développe une classe sous dev-cpp pour interragir avec ces fichiers situés dans C:/Program Files/.../... Mais je compte créer un projet MFC sous visual c++ pour proposer une interface user-friendly.
    Lorsque je lancerai mon programme compilé, Vista va sans doute me demander si je souhaite accorder la permission à ce programme? Cela signifie-t-il que l'interdiction sur l'écriture de fichier dans c:/... sera levée?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Vista ne demande pas ça tout seul: Il faut avoir un manifeste dans les ressources du programmes.

    Ce qui est important, c'est fonctionnellement à quoi sert ton programme:
    • Soit c'est une interface d'administration de quelque chose, et donc il est normal que seuls les administrateurs y aient accès ---> Utiliser un manifeste pour demander l'élévation sous Vista
    • Soit c'est pour accéder à des fichiers qui devraient normalement être modifiables par un utilisateur normal (comme des sauvegardes d'un vieux jeu) ---> Changer les droits des fichiers.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    En gros tout ça est lié à l'UAC ( User Account Control ) de Windows Vista.
    CodeProject dispose de plusieurs sources qui te seraient utiles dans ton cas :
    http://www.codeproject.com/KB/vista-...ount%20Control

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Merci smyley pour ton lien.
    Pour répondre à Médinoc, mon programme doit pouvoir être utilisé par n'importe quel utilisateur sans soucis mais doit obtenir les privilèges administrateur pour modifier des fichiers dans c:/program files/. A priori, tu as raison, je dois définir requestedExecutionLevel de telle sorte que le programme acquiert les droits d'administrateur (si j'ai bien tout compris). Reste à savoir comment faire

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le problème, c'est qu'un programme ne peut pas "passer" administrateur: Il peut seulement être lancé admin.
    Donc, tu vas devoir décomposer ton utilitaire en deux exécutables: L'un "normal", l'un pour les fonctions d'administration (qui pourra être lancé par l'autre avec ShellExecute()).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    D'après ce que j'ai lu, lorsque l'on tente d'écrire dans un fichier de C:/Program Files/ l'écriture fonctionne mais elle est virtuelle... Si j'ai bien compris. Si j'ouvre un fichier en écriture par exemple: c:/program files/essai/test.txt qui contient le texte "abcdef" et que mon programme écrase le contenu de ce fichier pour le remplacer par "ghijkl". Alors, cela aura pour effet de créer un fichier dans C:\Users\...\AppData\Local\VirtualStore\Program Files\essai\test.txt qui portera la valeur "ghijkl" mais le fichier original sera conservé dans Program Files/ avec la valeur "abcdef". Maintenant, si l'utilisateur qui a modifié le fichier précedemment tente d'y accéder en lecture par exemple par un programme quelconque. Il obtiendra la valeur "ghijkl". Mais si un autre utilisateur lit le fichier, il aura la valeur de base "abcdef". Etrange mais pas si bête! Pour mon cas, ça ira

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Si c'est pour faire ce genre de bétises, tu devrais peut-être te poser la question: Pourquoi Program Files ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Je ne vois pas de quelle bétise tu parles. Tout ce que j'en ai conclu c'est qu'il fallait que j'écrive dans Program Files de la manière la plus courante qu'il soit sans m'étonner de voir les fichiers originaux non modifié. Si tu étais au courant de ça avant, tu aurais pu m'en parler

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Mais je n'étais pas au courant de cela.
    Je pensais que Vista refusait simplement l'accès.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Okay Merci de ton aide en tout cas!

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans ce cas, ne laisse pas la virtualisation, car ton programme n'aura alors aucune influence sur le jeu vidéo (la virtualisation se fait programme-par-programme, il semblerait).

    Soit tu dois faire de ton programme un programme admin-uniquement (avec un manifeste et tout), soit tu dois rendre le dossier accessible en écriture aux utilisateurs normaux.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Dans ce cas, ne laisse pas la virtualisation, car ton programme n'aura alors aucune influence sur le jeu vidéo (la virtualisation se fait programme-par-programme, il semblerait).
    D'après ce que j'ai compris c'est pas exactement programme par programme mais la séparation s'opère entre programme admin et programme non admin. Tous les programmes accédant aux fichiers virtualisés accèdent au mêmes fichiers virtualisés, tandis que les programmes admin accèdent uniquement au vrais fichiers

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    oui c'est ça smyley. Je vérifierai si le jeu en question est lancé en admin ou pas. Si c'est le cas, j'aurais certainement un problème c'est vrai...

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/10/2011, 21h25
  2. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  3. Suppression de lignes dans un fichier sous dos
    Par ducho dans le forum Windows
    Réponses: 2
    Dernier message: 16/05/2005, 10h20
  4. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11

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