C++ fstream ouvre un fichier txt en mode ios::out|ios::in, mais le Bloc-notes peut modifier le fichier pendant l'exécution du programme
Que se passe-t-il ?Remarque : Pour Win7 x64, le compte est Administrateur. Il n'y a pas d'UAC, il s'agit donc directement de l'administrateur.
#include #include 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 :"<
Après avoir cliqué sur OK : la boîte de dialogue Enregistrer sous apparaîtra et le résultat pourra être écrasé.
Le programme est toujours en cours d'exécution, mais le fichier a été modifié.
À l'origine, il ne pouvait pas être modifié directement à l'aide de sublimetext, mais après quelques manipulations avec le Bloc-notes, sublimetext peut désormais également être modifié.
Veuillez me dire comment empêcher d'autres programmes d'écrire et de supprimer un certain fichier pendant que le programme est en cours d'exécution, tout en pouvant le lire
Merci
先说你的问题:记事本覆盖旧文件后,进程打开的文件是以前的文件(以前的文件还在,只不过你看不到了),你再次去编辑的文件已经是一个新的文件,
在linux下面即使是强制性锁也是可以绕开的,unlink就可以绕开,所以linux下是没有办法的避免这种问题,
windows下面系统API应该提供了某些功能,不过我太了解,因为经常会发现:“该文件被进程占用,无法删除”, 但是不排除绕开这种限制
这个问题还是比较有意思的.排查问题的思路可以是这样的:
是不是文件IO缓存的问题?
编辑器--系统缓冲区---实体文件
是不是文件读写锁的问题?
(看到你的代码虽然是以可读可写的方式打开文件,建立关联,但是只用到了读;读锁貌似不排他)