C++ fstream 以ios::out|ios::in 方式開啟txt檔案,程式執行中記事本卻可以修改檔案,這是怎麼回事?
註: Win7 x64 ,帳號是Administrator 管理員帳號,沒有UAC,直接就是管理員.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char const *argv[]) {
fstream file("test.txt",ios::in|ios::out);
file.open("test.txt",ios::in|ios::out);
char c;
cin>>c;
while(c!='X'){
cin>>c;
cout<<"Get a :"<<c<<endl;
}
return 0;
}
點完確定之後:出現另存為對話方塊,結果可以覆寫.
#程式還在運行中呢,檔案卻已經被修改了.
#原本直接用 sublimetext 是無法修改的,但經過記事本一折騰,現在sublimetext 也能修改了.
求教,如何能在程式運作過程中,禁止其他程式寫和刪除某個檔案,但是可以讀.
先說你的問題:記事本覆蓋舊文件後,進程打開的文件是以前的文件(以前的文件還在,只不過你看不到了),你再次去編輯的文件已經是一個新的文件,
在linux下面即使是強制性鎖也是可以繞開的,unlink就可以繞開,所以linux下是沒有辦法的避免這種問題,
windows下面系統API應該提供了某些功能,不過我太了解,因為經常會發現:“該文件被進程佔用,無法刪除”, 但是不排除繞過這種限制
這個問題還是比較有意思的.排查問題的思路可以是這樣的:
是不是檔案IO快取的問題?
編輯器--系統緩衝區---實體檔案
是不是文件讀寫鎖的問題?
(看到你的代碼雖然是以可讀可寫的方式打開文件,建立關聯,但是只用到了讀;讀鎖貌似不排他)