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

Windows Discussion :

Acces en lecture à un fichier verrouillé pour écriture (en c++ sous windows XP)


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Par défaut [Résolu] Acces en lecture à un fichier verrouillé pour écriture (en c++ sous windows XP)
    Bonjour,

    Je cherche à développer un outil qui permet de lire un fichier qui est en cours d'écriture par un autre process, sous Windows XP. Je me souviens de mes cours d'OS où on nous expliquait que Windows n'est pas super flexible en terme d'accès multiples aux fichiers disques, contrairement aux OS Unix.
    Je n'ai malheureusement pas la possibilité de modifier le programme d'écriture.

    Pour résumer, un prog 1.exe écrit continuellement des données toutes les secondes dans un fichier log.txt. Je cherche à écrire un programme 2.exe capable de lire ce fichier log.txt toutes les 5 secondes et faire une traitement spécifique lorsqu'une condition spécifique est rencontrée dans les données de log.txt.

    L'OS ne permet pas l'accès au fichier log.txt tant que 1.exe tourne.

    La seule solution qu'on m'a soufflé est d'utiliser le Windows Volume Shadow Service pour être capable de copier log.txt et de lire la copie avec 2.exe, ce qui ne me satisfait pas car l'étape de copie prend de plus en plus de temps au fur et à mesure que le fichier log.txt grossi.

    Je pensais à utiliser une architecture réseau pour permettre la lecture et l'écriture du fichier par un système unix. Est-ce possible faire ce type d'architecture sur un portable sans connexion réseau physique ?

    Une autre idée est de rediriger le fichier vers une entrée d'un autre process, capable de dupliquer les données entre un enregistrement et une routine de traitement. Existe-il un soft ou connaissez vous un exemple de source qui permet de le faire ?

    Merci pour votre aide.

  2. #2
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    Citation Envoyé par alpha35 Voir le message
    Je me souviens de mes cours d'OS où on nous expliquait que Windows n'est pas super flexible en terme d'accès multiples aux fichiers disques, contrairement aux OS Unix.
    Je pense que le problème n'est pas chez Windows mais plutôt chez les developpeurs qui ne savent pas comprendre la doc (ou qui ne la lise pas).

    Si on regarde la fonction CreateFile() qui doit être relativement bas niveau dans l'API de gestion de fichiers, le 3eme paramètre est justement un flag qui spécifie le mode et le comportement du partage.

    Citation Envoyé par alpha35 Voir le message
    Je n'ai malheureusement pas la possibilité de modifier le programme d'écriture.
    Dommage ...

    Citation Envoyé par alpha35 Voir le message
    La seule solution qu'on m'a soufflé est d'utiliser le Windows Volume Shadow Service pour être capable de copier log.txt et de lire la copie avec 2.exe, ce qui ne me satisfait pas car l'étape de copie prend de plus en plus de temps au fur et à mesure que le fichier log.txt grossi.

    Je pensais à utiliser une architecture réseau pour permettre la lecture et l'écriture du fichier par un système unix. Est-ce possible faire ce type d'architecture sur un portable sans connexion réseau physique ?

    Une autre idée est de rediriger le fichier vers une entrée d'un autre process, capable de dupliquer les données entre un enregistrement et une routine de traitement. Existe-il un soft ou connaissez vous un exemple de source qui permet de le faire ?
    J'ai peur que toutes ces solutions soient un peu bancales

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Jenna Voir le message
    Je pense que le problème n'est pas chez Windows mais plutôt chez les developpeurs qui ne savent pas comprendre la doc (ou qui ne la lise pas).
    Oui, c'est hélas un peu trop courant en dév Win32, la plupart ne savent même pas quelles sont les "bonnes pratiques" à appliquer malgré le fait que Microsoft les donne à chaque version d'OS...

    Citation Envoyé par Jenna Voir le message
    J'ai peur que toutes ces solutions soient un peu bancales
    Moi, je n'en ai pas peur, j'en suis certain. C'est l'application créant ce fichier qui est mal fichue à la base, et quoi que tu fasses en bidouille là-dessus, tu n'as aucune garantie : tu risques de corrompre le fichier (le drame pour un fichier de log), ou que ça ne fonctionne que par miracle (et que ça cesse de fonctionner au premier KB / SP déployé).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Par défaut
    Merci pour vos réponses, je suis tout à fait d'accord avec vous, ce serait mieux que le soft initial soit bien pensé... mais ce n'est pas le cas.

    J'essaie de creuser les redirection de fichiers... Connaissez vous un outil qui monte un disque X: qui est en fait un tampon mémoire utilisable par une autre appli ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 528
    Par défaut
    Franchement, je pense qu'un petit coup de reverse-engineering pour modifier le flag dans la primitive de création du fichier de log sera plus rapide à faire que de passer par des moyens détournés. Si vous avez un minimum de compétences dans le sujet ou un peu de motivation cela va s'en dire. (Et aussi avoir la joie d'envoyer la version patchée du programme à ces GROS guignols).

    Avec un peu de chance, ce sont des guignols feignants et ils ont utilisés une librairie de log toute faite (donc ou elle est bien pourrie ou ils s'en servent n'importe comment), et là, vous n'avez qu'à chercher sur le Net une éventuelle méthode "documentée" pour contourner ce problème.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    D'un autre côté, la plupart du temps, quand on ouvre un fichier en écriture, il ne faut pas que d'autres processus le lisent ou ils risquent d'être surpris. C'est juste que les fichiers de log sont un cas spécial...
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/12/2012, 21h32
  2. Réponses: 2
    Dernier message: 14/03/2011, 09h33
  3. Réponses: 2
    Dernier message: 11/03/2011, 18h06
  4. Fichier verrouillé pour modification par
    Par pas85 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 02/03/2009, 09h51
  5. Accès en lecture à un fichier distant
    Par le_vive dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/06/2007, 14h12

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