檔案鎖定 - C++ fstream 以ios::out|ios::in 方式開啟txt檔案,程式執行中記事本卻可以修改檔案?
世界只因有你
世界只因有你 2017-05-16 13:24:22
0
2
1080

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 也能修改了.


求教,如何能在程式運作過程中,禁止其他程式寫和刪除某個檔案,但是可以讀.

謝謝.###
世界只因有你
世界只因有你

全部回覆(2)
我想大声告诉你

先說你的問題:記事本覆蓋舊文件後,進程打開的文件是以前的文件(以前的文件還在,只不過你看不到了),你再次去編輯的文件已經是一個新的文件,

在linux下面即使是強制性鎖也是可以繞開的,unlink就可以繞開,所以linux下是沒有辦法的避免這種問題,

windows下面系統API應該提供了某些功能,不過我太了解,因為經常會發現:“該文件被進程佔用,無法刪除”, 但是不排除繞過這種限制

小葫芦

這個問題還是比較有意思的.排查問題的思路可以是這樣的:

  1. 是不是檔案IO快取的問題?
    編輯器--系統緩衝區---實體檔案

  2. 是不是文件讀寫鎖的問題?
    (看到你的代碼雖然是以可讀可寫的方式打開文件,建立關聯,但是只用到了讀;讀鎖貌似不排他)

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!