Maison  >  Questions et réponses  >  le corps du texte

Verrouillage de fichier - 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 ?

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

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

.
世界只因有你世界只因有你2684 Il y a quelques jours1031

répondre à tous(2)je répondrai

  • 我想大声告诉你

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

    Parlons d'abord de votre problème : une fois que le Bloc-notes a écrasé l'ancien fichier, le fichier ouvert par le processus est le fichier précédent (le fichier précédent est toujours là, mais vous ne pouvez pas le voir), et le fichier que vous modifiez à nouveau est déjà un nouveau fichier

    Sous Linux, même les verrous obligatoires peuvent être contournés en dissociant le lien, il n'y a donc aucun moyen d'éviter ce problème sous Linux,

    L'API système sous Windows devrait assurer certaines fonctions, mais je la connais très bien, car je trouve souvent : "Ce fichier est occupé par un processus et ne peut pas être supprimé", mais je n'exclus pas de contourner cette restriction

    répondre
    0
  • 高洛峰

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

    Cette question est assez intéressante. L'idée du dépannage peut être la suivante :

    1. Est-ce un problème de cache d'E/S de fichier ?
      Éditeur - Tampon système --- Fichier d'entité

    2. Est-ce un problème de verrouillage en lecture-écriture de fichier ?
      (Je vois que bien que votre code ouvre le fichier de manière lisible et inscriptible et établit une association, il utilise uniquement la lecture ; le verrou en lecture ne semble pas être exclusif)

    répondre
    0
  • Annulerrépondre