2010-09-28 89 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打開文件。