ArthurAuguste
Messages postés107Date d'inscriptionlundi 7 février 2011StatutMembreDernière intervention17 février 2018
-
13 juin 2011 à 10:33
ArthurAuguste
Messages postés107Date d'inscriptionlundi 7 février 2011StatutMembreDernière intervention17 février 2018
-
30 juin 2011 à 09:30
Bonjour,
J’ai un problème avec GetOpenFileName si et seulement si le fichier que j’ouvre fait plus de 93Ko !!!! Si j’ai fait une erreur de programmation vous allez pouvoir la trouver très vite car j’ai réécris un programme élémentaire très simple et très court qui reproduit exactement le phénomène et vous en trouverez le code complet ci-dessous.
Ce programme est une simple fenêtre avec deux boutons (un bouton "Ouvrir" et un bouton "Fermer") Le bouton "Ouvrir" (case 1 ) appelle la fonction GetOpenFileName pour choisir un fichier quelconque, puis ouvre le fichier avec CreateFile, puis lit un premier bloc de 1024 bytes avec ReadFile et c’est tout. Le bouton "Fermer" (case 2) permet de fermer le fichier qui vient d’être ouvert. Vous pouvez recopier ce code, le jeu consiste à faire l’expérience en choisissant un premier fichier d’environ 75Ko, vous l’ouvrez avec le bouton Ouvrir, puis vous le fermez avec le bouton "Fermer" et vous recommencez plusieurs fois avec le même fichier : Ouvrir, Fermer, etc… ceci sans jamais cliquer sur la croix pour fermer la fenêtre, vous constaterez qu’il n’y a aucun problème, tout marche très bien. Puis vous recommencez en choisissant cette fois-ci un fichier d’environ 1 Mo (>93Ko c’est suffisant, mais avec 1Mo ça va plus vite), vous allez constater à un moment (ou même souvent dès le premier essai) que le message 2 s’affiche puis disparaît tout seul en même temps que la fenêtre. Je serais ravi que vous trouviez la faille car je ne vois pas de rapport avec la taille du fichier puisque dans tous les cas je ne lis que le 1er bloc, ci-dessous le petit programme :
#include <windows.h>
LRESULT CALLBACK processmainmess( HWND, UINT, WPARAM, LPARAM);
HINSTANCE n0instance;
MSG message;
OPENFILENAME ofn;
int APIENTRY WinMain( HINSTANCE W_n0inst, HINSTANCE W_n0precinst, LPTSTR W_CmdLine, int W_cdeaffich) // entier signé (32 bits)
{
n0instance = W_n0inst;
ArthurAuguste
Messages postés107Date d'inscriptionlundi 7 février 2011StatutMembreDernière intervention17 février 2018 14 juin 2011 à 23:32
Complément d'info.
Je suis allé sur un autre site où plusieurs personnes m'ont informé qu'elles avaient recopié mon mini programme et l'avaient exécuté chez elles sans aucun problème, même avec des gros fichiers. Ceci signifie, a priori, que mon mini programme est bon (j'aurais préféré le contraire). En conclusion, ma question n'est plus où ai-je fait une erreur de programmation ? Mais plutôt quelqu'un aurait-il un idée sur la raison pour laquelle ce mini programme se comporterait ainsi chez moi ?
J'ai la version Windows XP familiale SP3:
Version5.1 (numéro 2600.xpsp_sp3_gdr.101209-1647: Service Pack 3)
Merci
ArthurAuguste
Messages postés107Date d'inscriptionlundi 7 février 2011StatutMembreDernière intervention17 février 2018 30 juin 2011 à 09:30
Le problème est élucidé, j'ai posté un message spécifique pour ça. Mais comme je ne le vois pas toujours apparaître dans la liste de mes messages postés, si vous ne le trouvez pas, veuillez m'en informer ici, je le reposterai.
A+