C ++ Проблема записи в файл - PullRequest
       13

C ++ Проблема записи в файл

4 голосов
/ 28 сентября 2010

Мой код:

std::ofstream m_myfile,

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

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

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

Спасибо

Ответы [ 4 ]

1 голос
/ 28 сентября 2010

Вам нужно открыть файл с включенным общим доступом. Используйте следующую перегрузку метода 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 голосов
/ 28 сентября 2010

Другой вариант - использовать розетки.Ознакомьтесь с вопросом о стеке: Существует ли способ для нескольких процессов совместно использовать прослушивающий сокет?

0 голосов
/ 28 сентября 2010

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

0 голосов
/ 28 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...