2010-09-28 2 views
4

Моего кода:C++ Проблемы записи в файл

std::ofstream m_myfile, 

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

при выполнении этой программы C++, у меня есть другая программа, которая должна прочитать этот файл. Проблема в том, что файл заблокирован C++, и я не могу прочитать его из другой программы. Я знаю, что мне нужно что-то делать, когда я пишу код каким-то образом в Программе на C++, где он позволяет обмениваться. Может кто-то писать именно то, что мне нужно. Я убил это до смерти и до сих пор не могу заставить это работать.

Некоторые люди говорят, закрывают файл, прежде чем другая программа его прочитает. Я не могу этого сделать, файл должен быть открытым.

Thanks

+0

Что вы имеете в виду, когда говорите, что «файл заблокирован?» Что пытается сделать другая программа (с кодом), какие ошибки/исключения/симптомы возникают, и чего вы ожидаете? – pilcrow

+0

Вы пытаетесь внедрить трубы? Вы хотите читать и писать в файл одновременно или сначала писать, а затем читать? Для второго варианта вы можете создать файл блокировки «zlog.lck» программой, которая записывает файл и делает проверки его существования в том, что нужно читать заблокированный файл. – erjot

+0

Почему файл должен оставаться открытым и какой операционной системой вы нацеливаетесь, поскольку это будет иметь последствия? – ChrisBD

ответ

1

Необходимо открыть файл с включенным доступом. Используйте следующую перегрузку метода open:

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

и передать соответствующий режим доли как nProt:

  • filebuf::sh_compat: Совместимость режима Доля
  • filebuf::sh_none: Эксклюзивный режим; не разделяя
  • filebuf::sh_read: Читайте обмен не позволил
  • filebuf::sh_write: Написать совместное использование позволило

Существует также перегрузка ofstream конструктор, который принимает те же аргументы.

0

Обмен будет осуществляться на уровне ОС. Поэтому вам нужно взглянуть на API для своей ОС и выяснить, как включить обмен чтения и записи.

Примечание: вы все еще, вероятно, не получите желаемых результатов, потому что будут проблемы с кешированием и буферизацией, и то, что, по вашему мнению, было записано в файл, на самом деле не существует.

Если вы хотите обмениваться информацией между двумя процессами, используйте именованные каналы или сокеты. Оба доступны практически для каждой ОС.

0

Используйте filebuf::sh_write при открытии файла.

Смежные вопросы