Verrouiler un fichier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 224 fois - Téléchargée 35 fois

Contenu du snippet

Voici une fonction qui permet de verrouiller un fichier.
Et une procedure qui permet de déverrouiller. En utilisant des fonction de l'API

Il est possible avec lockFile de verrouiller une partie du fichier je pense. Je regarderai plus tard pour gérer cela.

Source / Exemple :


Function LockFichier(sFich: string): hFile;
var
  HandleFich: hFile;
  // le type HFile n'est rien d'autre d'un LongWord
  wHSize, wSize: longword;
  ofs: TOFStruct; // on ne s'en servira pas (c'est juste pour le passer à OpenFile
begin
  result:= 0;
  if FileExists(sFich) then
  begin
    // on ouvre le fichier et on récupére son Handle
    HandleFich:= OpenFile(pChar(sFich), ofs, OF_READ or OF_WRITE or OF_SHARE_EXCLUSIVE);
    if HandleFich <> 0 then
    begin
      // on récupére la taille du fichier
      wSize:= GetFileSize(HandleFich, @wHSize);
      // on doit donné a LockFile la partie du fichier a verrouiller (c'est borne)
     if LockFile(hf, 0, 0, wSize, wHSize) then
        result:= HandleFich;
    end;
  end;
end;

Procedure UnLockFichier(HandleFich: hFile);
begin
  if HandleFich <> 0 then
    CloseHandle(HandleFich);
end;

Conclusion :


Voir le code original sur :
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20655593.html

A voir également

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
29 juillet 2011

Bonsoir,

En bon débutant...donc mauvais. j' ai pris le code directement en copier coller dans mon source et compiler l'ensemble dans "DELPHI7".

Le résultat ne c'est pas fait attendre, erreur la variable .....inconnue.

.....
// on récupére la taille du fichier
wSize:= GetFileSize(HandleFich, @wHSize);
// on doit donné a LockFile la partie du fichier a verrouiller (c'est borne)
if LockFile(hf, 0, 0, wSize, wHSize) then
result:= HandleFich;
.....
[Erreur] FRetours.pas(542): Identificateur non déclaré : 'hf'

Effectivement cette variable n'est pas déclarée et comme je ne comprend pas tout et ne trouvant aucune explication sur la fonction "LocFile" je ne sais pas à quoi correspond "hf". if LockFile(hf, 0, 0, wSize, wHsize).

peut être que hf correspond à HandleFich.

La raison à des raisons que la raison ignore, Mais l'ignorance c'est pire.

Ceci dit je suis un peu perplexe sur la difficulté rencontrée en DELPHI7 à locker et delocker un fichier partagé sur un réseau.

si, devant mon désarrois, quelqu'un ou quelle qu’une ont une méthode pour me sortir d'une ignorance aussi abyssale; je suis preneur.

Merci d'avance
Messages postés
22
Date d'inscription
lundi 2 décembre 2002
Statut
Membre
Dernière intervention
28 octobre 2010

Bonjour, ça marche trés bien la fonction (LockFichier), mais je sais ne sais pas comment passer le paramètres (HandleFich) a la procedure (UnLockFichier) : vous pouvez m'expliqué avec un petit exemple.

Et si possible de verrouiller le fichier en question même si l'application est fermer.

Merci.
Messages postés
10
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
20 novembre 2007

Bravo pour les fichiers locker!
Mais comment libérer un dosier ?
J'ai utilisé de façon externe «unlocker» et je voie que ça fonctionne bien et je voie le chemin verrouiller dans la fenêtre
mais comment puis-je le faire avec delphi?
La situation est la suivante; j'ai un petit programme qui a besoin de détruire des tables dans un répertoire puis le répertoire par la suite je réussis à détruire les tables mais quand je viens pour détruire le répertoire il me dit qu'il est utilisé par une personne ou un programme.
Avec «unlocker» je réussis à enlever les locks sur le répertoire mais je ne veut pas avoir à utilisé «unlocker» quel serait le code?
Messages postés
40
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
27 octobre 2009

Très bien le code et ca fonctionne !

Juste une question : et pour verrouiller un dossier de Windows, avez un code similaire ? Est-ce possible ?

Merci pour votre réponse, ca m'intérresse

Phephalavi
Messages postés
1
Date d'inscription
jeudi 16 décembre 2004
Statut
Membre
Dernière intervention
16 décembre 2004

tres bien éxpliqué et surtous tres simple
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.