Heim  >  Fragen und Antworten  >  Hauptteil

Dateisperre – C++ fstream öffnet eine TXT-Datei im ios::out|ios::in-Modus, aber Notepad kann die Datei ändern, während das Programm ausgeführt wird?

C++ fstream öffnet eine txt-Datei im ios::out|ios::in-Modus, aber Notepad kann die Datei ändern, während das Programm ausgeführt wird?

Hinweis: Für Win7 x64 ist das Konto Administrator. Es gibt keine UAC, es ist also direkt der Administrator.

#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;
}

Nach dem Klicken auf „OK“ erscheint das Dialogfeld „Speichern unter“ und das Ergebnis kann überschrieben werden.

Das Programm läuft noch, aber die Datei wurde geändert.

Ursprünglich konnte es nicht direkt mit Sublimetext geändert werden, aber nach einigem Hantieren mit Notepad kann Sublimetext jetzt auch geändert werden.

Bitte sagen Sie mir, wie ich verhindern kann, dass andere Programme eine bestimmte Datei schreiben und löschen, sie aber trotzdem lesen können

世界只因有你世界只因有你2735 Tage vor1083

Antworte allen(2)Ich werde antworten

  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:26:22

    先说你的问题:记事本覆盖旧文件后,进程打开的文件是以前的文件(以前的文件还在,只不过你看不到了),你再次去编辑的文件已经是一个新的文件,

    在linux下面即使是强制性锁也是可以绕开的,unlink就可以绕开,所以linux下是没有办法的避免这种问题,

    windows下面系统API应该提供了某些功能,不过我太了解,因为经常会发现:“该文件被进程占用,无法删除”, 但是不排除绕开这种限制

    Antwort
    0
  • 高洛峰

    高洛峰2017-05-16 13:26:22

    这个问题还是比较有意思的.排查问题的思路可以是这样的:

    1. 是不是文件IO缓存的问题?
      编辑器--系统缓冲区---实体文件

    2. 是不是文件读写锁的问题?
      (看到你的代码虽然是以可读可写的方式打开文件,建立关联,但是只用到了读;读锁貌似不排他)

    Antwort
    0
  • StornierenAntwort