C++ fstream membuka fail txt dalam mod ios::out|ios::in, tetapi Notepad boleh mengubah suai fail semasa program sedang berjalan
Nota: Untuk Win7 x64, akaun tersebut adalah Administrator Tiada UAC, jadi ia adalah terus pentadbir.
#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;
}
Selepas mengklik OK: kotak dialog Simpan Sebagai akan muncul, dan hasilnya boleh ditimpa.
Program masih berjalan, tetapi fail telah diubah suai.
Pada asalnya, ia tidak boleh diubah suai terus menggunakan sublimetext, tetapi selepas beberapa kali bermain-main dengan Notepad, kini sublimetext juga boleh diubah suai.
Sila beritahu saya cara menghalang program lain daripada menulis dan memadam fail tertentu semasa program sedang berjalan, tetapi masih boleh membacanya
Mari kita bincangkan masalah anda dahulu: selepas Notepad menimpa fail lama, fail yang dibuka semasa proses adalah fail sebelumnya (fail sebelumnya masih ada, tetapi anda tidak dapat melihatnya), dan fail yang anda edit semula sudah ada fail baharu
Di Linux, kunci mandatori pun boleh dipintas dengan menyahpaut, jadi tiada cara untuk mengelakkan masalah ini di Linux,
API sistem di bawah Windows sepatutnya menyediakan fungsi tertentu, tetapi saya sangat mengetahuinya, kerana saya sering mendapati: "Fail ini diduduki oleh proses dan tidak boleh dipadam", tetapi saya tidak menolak sekatan ini
Soalan ini agak menarik Idea penyelesaian masalah boleh seperti berikut:
Adakah ini masalah cache IO fail?
Editor--Penimbal Sistem---Fail Entiti
Adakah ini masalah kunci baca-tulis fail?
(Saya nampak bahawa walaupun kod anda membuka fail dalam cara yang boleh dibaca dan ditulis dan mewujudkan persatuan, ia hanya menggunakan bacaan; kunci baca nampaknya tidak eksklusif)