2010-09-28 65 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++程序中允许共享的地方我必须写一些代码。有人能写出我所需要的吗?我已经把这个搜索引擎搜索到了,但仍然无法让这个工作。

有人说在其他程序读取它之前关闭该文件。我无法做到这一点,文件需要打开。

谢谢

+0

你是什么意思,当你说其他程序试图做什么(使用代码),它遇到什么错误/异常/症状,以及您期望的是什么? – pilcrow 2010-09-28 15:20:29

+0

你想要实现管道吗?你想同时读写文件,还是先写入然后再读取?对于第二种选择,您可以通过编写文件的程序创建锁定文件“zlog.lck”,并在需要读取锁定文件的文件中检查它是否存在。 – erjot 2010-09-28 15:24:01

+0

为什么该文件需要保持打开状态以及您要操作哪个操作系统,因为这会产生影响? – ChrisBD 2010-09-28 15:24:33

回答

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打开文件。