Accueil > Forum > > > > Comment effectuer une actualisation de fichier?
Comment effectuer une actualisation de fichier?
mercredi 25 avril 2007 à 23:04:54 |
Comment effectuer une actualisation de fichier?

jalmjj
|
Alors voilà le problème que je n'arrive pas à résoudre (étant toujours débutant en C++). J'ai crée un programme de réception de liaison série grâce auquel je récupère des données que j'enregistre au fur et à mesure de leur arrivé dans un fichier texte. Mais je dois pouvoir utiliser ce fichier texte dans une autre application (un logiciel crée en MFC et C++) afin de pouvoir décodé les données présentes dans ce fichier. Donc pour l'ouverture et l'analyse de ce fichier je n'ai aucun problème mais je voudrais mettre en place un procédé qui m'indiquerai lorsque de nouvelles données seraient mise dans le fichier texte et qui me demanderai si je souhaite ou non ré-ouvrir ce fichier afin d'avoir toutes les données contenues dans le fichier. Et j'aimerai aussi que si je réponde oui celà re-ouvre automatiquement le fichier. Je sais que celà doit être possible vu que lorsque j'ouvre le fichier texte avec WORDPAD pour lire les données du fichier, j'ai cette fonction qui me dis que le fichier a été modifié et me demande si je veux ouvrir la nouvelle version du fichier. Dans le cas ou personne ne serait comment faire ou que celà ne soit pas possible, est-ce qu'il est possible de mettre un simple bouton d'actualisation (sans messages qui previendrait d'une modification dans le fichier) comme celui pour actualiser une page internet??? Merci d'avance pour votre aide et vos réponses.
|
|
jeudi 26 avril 2007 à 00:11:57 |
Re : Comment effectuer une actualisation de fichier?

THEwarrior333
|
Peut-etre en comparant regulierement la date de modification du fichier? (cf GetFileAttributes) < body>
|
|
jeudi 3 mai 2007 à 22:33:43 |
Re : Comment effectuer une actualisation de fichier?

jalmjj
|
Merci pour ta réponse et ton aide THEwarrior333. J'ai en effet regarder comment utiliser la GetFileAttributes et en effectuant une comparaison entre la date de la derniere modification du fichier et celle à un moment ultérieur je peux voir si il y a eu un rajout de données. Et dans ce cas, je mets la nouvelle date comme base pour la prochaine comparaison car j'ai mis cette comparaison dans la boucle me servant pour la réception de données via le port serie. Je peux donc maintenant savoir quand a lieu un changement dans mon fichier.
Dans un deuxième temps, et comme j'aimerais prévenir l'utilisateur que le fichier a subit des modifications, j'ai utilisé la fonction MessageBox [MessageBox(0,date,"Le fichier a été modifié",MB_ICONWARNING); ] pour faire apparaître un message prévenant qu'une mise à jour du fichier a été faite. Mais a priori tant que je n'ai pas validé la fenêtre qui apparait le programme ne passe pas à l'exécution de la ligne de code suivante. J'aimerai donc savoir si il existe un moyen pour faire apparaître une fenêtre avec mon message et que celles-ci n'empêche pas la poursuite de l'exécution du programme (plus simplement faire une fenêtre qui ne fasse que afficher ma phrase comme on peut le faire avec un "cout").
|
|
vendredi 4 mai 2007 à 01:11:59 |
Re : Comment effectuer une actualisation de fichier?

THEwarrior333
|
MessageBox est en effet un evenement bloquant, c'est a dire qu'il interrompt l'execution du programme. Tu as plusieurs solutions pour y remedier: - soit tu réalises une fenetre d'interface (peut etre est-ce deja fait?) en API windows. Il suffit alors dans celle-ci d'intégrer un contrôle tel qu'un static box par exemple qui recevra le texte d'avertissement. - soit tu crées un thread (si tu ne sais pas ce que c'est dis le moi) qui s'occupe uniquement de savoir si ton fichier est mis ou jour et d'avertir quand c'est le cas. Créer et gérer les threads est moins évident que de créer un simple fenetre mais c'est tout a fait envisageable.
La premiere solution me semble etre la plus adaptée à ton probleme mais n'ayant pas tous les details de ton projet ce n'est pas sûr non plus.
|
|
lundi 7 mai 2007 à 00:24:41 |
Re : Comment effectuer une actualisation de fichier?

jalmjj
|
Encore merci pour ta réponse. Non, je ne connais pas le thread (mais j'ai cru comprendre que c'etait un element bien utile, qui servait assez souvent en programmation). Je ne connais pas non plus l'API windows.
Sinon ben par rapport a mon projet et ma question de départ, ben en fait j'ai d'un côté un programme qui réceptionne des données par la liaison série et qui les sauvegardes dans des fichiers textes. Et d'un autre côté, j'ai un logiciel que j'ai récupéré (écrit en MFC et C++ ) qui me permet d'analyser et de traités les données que je reçoit. En observant le programme code du logiciel j'ai réussi a mettre un lien dans la barre de tâche qui me permet de lancer le fichier éxecutable de mon programme de réception de la liaison série. Et donc, en fait là je voudrais avoir un message qui s'affiche sur l'écran pour me dire quand le fichier de reception est modifie, donc juste besoin d'afficher un simple message lorsque je detecte un changement (en procédant comme tu me l'as conseillé avec une comparaison de la date de modification du fichier).
Pour ce qui est de ma premiere requete de mise a jour, ben je pense que je vais mettre en place un bouton dans la barre de tache qui m'ouvrira le fichier dont j'aurais specifier le nom. Et pour ce nom ben je lui donnerai celui du fichier qui est dejà ouvert, car comme lorsque un fichier est ouvert par le logiciel son mon est affiché, je pense que je dois pouvoir le récupérer et donc le réutiliser pour réouvrir le fichier.
|
|
lundi 7 mai 2007 à 06:39:04 |
Re : Comment effectuer une actualisation de fichier?

THEwarrior333
|
En deux mots pour les definitions: - un thread est l'execution en parallele d'une partie d'un code. Pour te donner une idée: la copie de fichiers sous windows utilise deux threads: un pour faire la copie proprement dite et un pour afficher l'animation de copie. Si l'animation et la copie se faisaient sous un meme thread, l'animation serait figée ou tres saccadée. Il y a des bons tutos sur le net. Tu peux deja regarder celui-la: [ Lien ] - l'API windows est la librairie permettant d'utiliser les fonctions windows telles que l'affichage de fenetres, de controles, l'utilisation de threads justement, etc... D'ailleurs MFC est en fait une sur-couche (une vraie usine à gaz d'ailleurs) de cette API, c'est à dire un ensemble de classes dont le but est (soit-disant) de simplifier la programmation windows.
Bref dans ton cas si je comprend bien, tu as la possibilité au moment du click sur le bouton de lancer un thread exécutant ton programme. Ainsi une fois ton programme lancé, meme s'il s'interrompt pour avertir d'une mise à jour, le programme de traitement (celui que tu as recupéré) continue d'intéragir avec l'utilisateur. Cependant, tant que l'utilisateur n'a pas validé le MessageBox, ton programme attendra. Est-ce ce que tu souhaites? Si en fait tu souhaites que ton programme récupère sans cesse les données et ne soit jamais interrompu lors du MessageBox, alors le thread doit etre lancé au niveau de ton programme ce qui, en résumé, fait que ton programme s'execute en deux threads qui communiquent entre eux: - un contenant la boucle de reception des données et qui envoie un message à l'autre thread pour l'avertir d'une mise à jour. - un deuxieme qui contient la boucle de réception des messages du premier thread et affichant un MessageBox lorsque le premier thread lui en donne l'ordre.
Sinon puisque tu as pu comprendre un peu le fonctionnement de l'interface en MFC, peut-etre arriverais-tu à y intégrer une zone de texte statique recevant les messages de mise à jour...A ce moment la ca simplifie les choses car tu n'as peut-etre plus besoin de threads.
Pour ce qui est du nom du fichier ouvert, s'il est affiché par l'interface alors oui biensur tu dois pouvoir le récupérer.
|
|
mardi 8 mai 2007 à 21:49:46 |
Re : Comment effectuer une actualisation de fichier?

jalmjj
|
"Bref dans ton cas si je comprend bien, tu as la possibilité au moment du click sur le bouton de lancer un thread exécutant ton programme. Ainsi une fois ton programme lancé, meme s'il s'interrompt pour avertir d'une mise à jour, le programme de traitement (celui que tu as recupéré) continue d'intéragir avec l'utilisateur. Cependant, tant que l'utilisateur n'a pas validé le MessageBox, ton programme attendra. Est-ce ce que tu souhaites?"
Je ne sais pas si cela est un thread mais j'ai utilisé la fonction shellexecute (que j'ai trouvé en cherchant dans l'aide du logiciel Microsoft Visual C++). Sinon tu as raison mon programme attend que je valide le messagebox et c'est justement ceci que je veux éviter car cela a pour effet de me faire perdre des données lors de ma réception par la liaison serie. Sinon si j'ai bien compris ce que tu voulais dire avec des threads on peut en quelques sortes faire fonctionner deux programmes en parrallèle? Si c'est le cas cela conviendrait parfaitement a mon problème donc je vais lire le tuto sur le lien que tu as mis et essayé de comprendre comment ça marche. Et concerant le nom du fichier que je veux récupérer, oui il s'affiche sur l'interface du logiciel avec d'autres informations et c'est pour ça que j'ai penser que je pouvais sûrement le récupérer, il me faut juste un peu de temps pour comprendre ou se situe les informations dans le code du logiciel ^^. Encore merci pour toutes tes réponses.
|
|
mercredi 9 mai 2007 à 05:46:21 |
Re : Comment effectuer une actualisation de fichier?

THEwarrior333
|
En fait un thread n'est pas vraiment l'execution de deux programmes en parallèle: tu crées un thread à l'intérieur d'un programme pour faire fonctionner une partie du code (des fonctions) en parallèle. ShellExecute convient pour lancer ton exécutable à partir du logiciel. Il ne résoud pas ton probleme car tu dois créer un thread dans ton programme, pour le contrôle du flot de données sans quoi chaque apparition du MessageBox bloquera l'exécution de ton programme.
|
|
Cette discussion est classée dans : fichier, texte, données, actualisation, cel
Répondre à ce message
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|