2010-09-28 8 views
4

Mon code:C++ Problème écriture dans un fichier

std::ofstream m_myfile, 

m_myfile.open ("zLog.txt"); 
m_myfile << "Writing this to a file " << " and this " << endl; 

lorsque ce programme C++ fonctionne, j'ai un autre programme qui a besoin de lire ce fichier. Le problème est que le fichier est verrouillé par C++ et je ne peux pas le lire à partir de l'autre programme. Je sais qu'il y a quelque chose que je dois faire quand j'écris le code d'une manière ou d'une autre dans le programme C++ où il permet le partage. Quelqu'un peut-il écrire exactement ce dont j'ai besoin. Je l'ai googlé à mort et je n'arrive toujours pas à le faire fonctionner.

Certaines personnes disent fermer le fichier avant que l'autre programme ne le lise. Je ne peux pas faire cela, le fichier doit être ouvert.

Merci

+0

Que voulez-vous dire lorsque vous dites que "le fichier est verrouillé?" Qu'est-ce que l'autre programme tente de faire (avec le code), quelles erreurs/exceptions/symptômes rencontre-t-il, et qu'attendez-vous plutôt? – pilcrow

+0

Essayez-vous d'implémenter des tuyaux? Voulez-vous lire et écrire dans le fichier simultanément ou d'abord écrire puis lire? Pour la deuxième option vous pouvez créer un fichier de verrouillage "zlog.lck" par un programme qui écrit le fichier et fait des vérifications pour son existence dans celui qui a besoin de lire le fichier verrouillé. – erjot

+0

Pourquoi le fichier doit-il rester ouvert et quel système d'exploitation ciblez-vous, car cela aura un impact? – ChrisBD

Répondre

1

Vous devez ouvrir le fichier avec le partage activé. Utilisez la surcharge suivante du procédé open:

void open(const char *szName, int nMode = ios::out, int nProt = filebuf::openprot); 

et passer le mode d'action approprié comme nProt:

  • filebuf::sh_compat: Compatibilité mode de partage
  • filebuf::sh_none: Mode exclusif; pas de partage
  • filebuf::sh_read: Lire le partage a permis
  • filebuf::sh_write: Ecrire le partage a permis

Il y a aussi une surcharge du constructeur ofstream qui prend les mêmes arguments.

0

Le partage va être contrôlé au niveau du système d'exploitation. Vous devez donc regarder l'API de votre système d'exploitation et déterminer comment activer le partage en lecture-écriture. Remarque: vous n'obtiendrez probablement toujours pas les résultats souhaités car il y aura des problèmes de mise en mémoire cache et de mise en mémoire tampon et ce que vous pensez avoir été écrit dans le fichier peut ne pas être présent.

Si vous souhaitez partager des informations entre deux processus, utilisez des canaux ou des sockets nommés. Les deux sont disponibles sur à peu près tous les systèmes d'exploitation.

0

Utilisez filebuf::sh_write lors de l'ouverture du fichier.

Questions connexes