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

Bibliothèques C++ Discussion :

problèmes avec GetSaveFileName et WriteFile


Sujet :

Bibliothèques C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Par défaut problèmes avec GetSaveFileName et WriteFile
    Bonjour,

    Je débute dans la programmation graphique, jusqu'à présent j'effectué de la programmation sous dos ou de la programmation sur composants.
    Je dois effectuer un portage d'une application DOS en application graphique utilisant la VCL. Je n'ai pas eu de problème pour effectuer la majeure partie des modifications mais je bloque un peu là.
    Je suis en train d'essayer de changer la méthode de chargement et d'enregistrement des fichiers en utilisant GetOpenFileName et GetSaveFileName.
    j'arrive bien à lancer ces fenêtres mais j'aimerais savoir si il est possible d'avoir un nom de fichier par défaut à leur ouverture et si oui de quel méthode.
    Mon principal problème est avec WriteFile (pour la sauvegarde) : je dois sauvegarder des tableaux de double et dans mes fichiers j'obtient que des caractères non reconnus.
    Voici l'extrait du code réalisant cette partie :

    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
    OPENFILENAME ofn;
    	HANDLE hf, hf2;
        DWORD dw;
    ZeroMemory(&ofn, sizeof(ofn));
    	ofn.lStructSize = sizeof(ofn);
    	ofn.nMaxFile = sizeof(szFile);
    	ofn.lpstrFilter = "Fichiers textes\0*.TXT\0Tous\0*.*\0";  // Filtre les fichiers
    	ofn.nFilterIndex = 1;
    	ofn.lpstrFile = szFile;
        ofn.lpstrFile[0] = '\0';
    	ofn.lpstrFileTitle = szFile;
    	ofn.nMaxFileTitle = 0;
    	ofn.lpstrInitialDir = "C:\Projet"; // Chemin par défaut
    	ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
    	ofn.lpstrTitle = NULL;	// modifie nom de la fenetre
    	ofn.lpstrDefExt = ".txt";
     
    	if (GetSaveFileName(&ofn) == true)
    	{
    	   	hf = CreateFile(ofn.lpstrFile, GENERIC_WRITE,
    			0, (LPSECURITY_ATTRIBUTES) NULL,
    			CREATE_NEW, FILE_ATTRIBUTE_NORMAL,
    			(HANDLE) NULL);
    		BOOL b = WriteFile(hf, cal, sizeof(cal), &dw, NULL);
    		if (!b) {
                MessageBox(NULL, "Erreur Fichier", "Impossible d'écrire dans le fichier", MB_OK);
    		}
    		CloseHandle(hf);
    	}

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Nom de fichier par défaut: Il me semble que si lpstrFile pointe sur une chaîne non-vide, cette chaîne sera utilisée comme nom par défaut.
    Aussi, attention, tu as oublié de doubler le backslash dans lpstrInitialDir.

    Au sujet du WriteFile(), il doit y avoir une incompréhension: Cherches-tu à créer un fichier texte ou un fichier binaire?
    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
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Le tout sans oublier que, l'idéal, ca reste toujours de séparer clairement le processus métier (la structure de données elle-même qu'il faut sauvegarder, avec sa fonction de sauvegarde) de tout ce qui a trait de l'interface graphique (le fait d'invoquer la fonction de sauvegarde de l'instance de la structure à enregirster en lui fournissant en paramètre le nom du fichier qui a été récupéré grâce au formulaire adéquat)...

    De cette manière, si, dans quelques années, tu décide de passer de la VCL à une autre bibliothèque graphique (Qt, par exemple) il n'y aura vraiment qu'à recréer l'interface graphique, le reste (le processus métier) n'ayant pour ainsi dire pas à être adapté
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Par défaut
    Merci pour les réponses, les fichiers créés en sauvegarde sont des fichiers textes. Pour l'évolution graphique, il n'y a rien de prévu mais il n'y a que les événements qui sont définis dans le fichier gérant l'interface. Le programme est séparé.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Quel est le type de cal?
    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.

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Par défaut
    cal est un tableau de double (29 lignes et 400 colonnes)

Discussions similaires

  1. [Win API] problème avec WriteFile
    Par acryline dans le forum Windows
    Réponses: 5
    Dernier message: 02/11/2006, 09h26
  2. Problème avec WriteFile
    Par Gh0st dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 13/07/2006, 19h32
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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