Se connecter / S'enregistrer
Votre question

Accès multiples à un fichier en C++sous window XP

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
28 Novembre 2009 18:00:55

Bonjour,

Habitué de linux, et je dois développer un petit utilitaire sous windows XP qui permet de lire un fichier alors qu'il est ouvert en lecture/écriture par un autre process. Je m'explique :
- un programme 1.exe qui m'est imposé et que je ne peux pas modifier écrit en continu des données binaires dans un fichier 1.txt
- je veux faire un programme 2.exe qui lit toutes les 15 s si certaines données sont présentes dans 1.txt.

Lorsque 1.exe est lancé, impossible d'accéder à 1.txt en lecture, ni de copier ce fichier dans un fichier temporaire le temps de le faire lire par 2.exe. Linux le permet, lui !

J'ai trouvé un petit utiliaire (unlocker, http://www.clubic.com/telecharger-fiche20237-unlocker.h...) qui permet de faire une copie, mais je souhaiterais pouvoir le faire sans utiliser de programme extérieur.

Merci pour votre aide.

Autres pages sur : acces multiples fichier window

a b L Programmation
28 Novembre 2009 19:06:57

Oui, et si tu fais des ouvertures/fermeture, sous windows, ça va ramer.
Tu peux voir du coté des MMF (Memory Mapped File):
CreateFileMapping(), OpenFileMapping(), MapViewOfFile(), etc.
m
0
l
29 Novembre 2009 11:36:14

et en faisant une copie du fichier avant ouverture ?


cricky, je suis assez d'accord, mais il me semble que s'il n'a pas accès au source du programme en amont, ca risque d'être foireux !
m
0
l
Contenus similaires
a b L Programmation
29 Novembre 2009 12:03:39

Ah oui, je n'avais pas bien lu. :) 

Du coup, c'est problématique puisque l'OS ajoute les verrous. Tu peux essayer sur une partition FAT32, mais le problème devrait persister.
Je vois juste le service Volume Shadow Copy, qui a été mis en place dans l'OS pour permettre de faire un backup en bloquant les écritures et permettant la lecture des fichiers verrouillés.
Je ne l'ai jamais utilisé, mais je ne vois que cette possibilité propre (je mets évidemment de côtés les hook système).

Bon courage. :) 
http://msdn.microsoft.com/en-us/library/aa381508%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa384589%28VS.85%29.aspx
m
0
l
29 Novembre 2009 17:05:50

Merci.

Effectivement, même chose avec une partition FAT. Cela semble assez compliqué, je vais me plonger dans le VSC. On peut accéder directement en lecture à la copie fantôme sans avoir à le rercopier (pour gagner du temps :D  )?

C'est quoi un hook système... ?

Autrement, je me demandais s'il existait un soft qui permet d'installer un système de fichier virtuel dans lequel 1.exe enregistre, mais qui traite le fichier différemment d'un fichier disque. Une sorte de redirection de sortie, transparente pour le programme 1.exe.
m
0
l
a b L Programmation
29 Novembre 2009 18:23:22

Comme je t'ai dit, je n'ai jamais utilisé, donc si ça marche fais le nous savoir. ;) 
Par hook, je voulais dire dévier les appels systèmes, un peu ce que tu proposes mais à l'appel de la fonction, ce qui n'est pas très propre.
m
0
l
30 Novembre 2009 08:36:43

essaye quand même de copier le fichier avant d'exploiter, non pas le fichier d'origine, mais sa copie.

Une fois exploité, tu supprime le fichier de travail.

L'OS n'empeche pas (il me semble) de recopier un fichier déjà ouvert par un autre soft!


Sinon, un hook système me parait chaud dans ton cas de figure.
m
0
l
30 Novembre 2009 20:04:53

J'ai essayé de copier le fichier en cours d'écriture, mais Windows ne le permet pas. Je crois me souvenir de mes cours d'OS que c'est effectivement un désavantage de Windows que n'ont pas les OS unix. D'où l'idée d'enregistrer dans une partition gérée par un système unix (accès par réseau ou autre...) et de faire une lecture par le même moyen. Comment faire tourner un réseau sur une même machine avec 2 OS différents ?

J'ai laissé tombé le hook système, c'est plus adapté à des évènements souris, clavier, ...
m
0
l
a b L Programmation
30 Novembre 2009 20:15:39

Microsoft a mis en place le Volume Shadow Service pour justement pouvoir faire des backup de serveurs. ;) 
m
0
l
30 Novembre 2009 22:02:19

La solution que tu proposes CRicky me semble la plus prometteuse parce qu'elle va marcher, je n'en doute pas.

Elle ne me satisfait pas complètement parce qu'elle implique un temps de traitement qui augmente avec la taille du fichier. Je souhaite faire du temps réel : pendant que 1.exe enregistre (à une cadence de 75 ms), 2.exe doit traiter le flux de données toutes les 10 s pour indiquer lorsque une condition particulière sur ces données est remplie. Si le temps d'attente pour obtenir la condition est de 3 heures, le fichier d'échange a le temps de grossir... et le temps de traitement de 2.exe va devenir pénalisant s'il faut le recopier en totalité toutes les 10 s.

C'est pour cela que je chercher encore une solution alternative qui permet de gérer un flux de taille constante...
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS