begin process at 2012 05 24 09:25:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Foxpro

 > 

Archives

 > 

Divers

 > 

étecter l'ajout ou la modification d'un fichier sur le disque.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

étecter l'ajout ou la modification d'un fichier sur le disque.

mardi 31 janvier 2006 à 11:47:52 | étecter l'ajout ou la modification d'un fichier sur le disque.

ygr2

Bonjour,
je cherche à coder une application qui permet de détecter l'ajout ou la modification d'un fichier sur le disque.
Je ne souhaitre pas utiliser un timer mais plutot reagir à un évènement (j'ai vu qu il existait la fonction BINDEVENT mais je n'ai pas trouve d exemples).
Merci de votre aide

jeudi 2 février 2006 à 12:45:27 | Re : étecter l'ajout ou la modification d'un fichier sur le disque.

Mike Gagnon

Membre Club
Il n'y pas vraiment de timer, mais il faut que tu fasse une surveillance d'une maniere ou d'une autre. L'exemple qui suit surveille la création de fichier et non la création de dossier.

PUBLIC frm
frm = CreateObject ("Tform", SYS(2023)) && surveiller le dossier c:\TEMP
frm.Visible = .T.

DEFINE CLASS Tform As Form
#DEFINE FILE_NOTIFY_CHANGE_FILE_NAME      1
#DEFINE FILE_NOTIFY_CHANGE_DIR_NAME       2
#DEFINE FILE_NOTIFY_CHANGE_ATTRIBUTES     4
#DEFINE FILE_NOTIFY_CHANGE_SIZE           8
#DEFINE FILE_NOTIFY_CHANGE_LAST_WRITE    16
#DEFINE FILE_NOTIFY_CHANGE_LAST_ACCESS   32
#DEFINE FILE_NOTIFY_CHANGE_CREATION      64
#DEFINE FILE_NOTIFY_CHANGE_SECURITY     128
#DEFINE INVALID_HANDLE_VALUE             -1
#DEFINE WAIT_OBJECT_0                     0
#DEFINE watchingInterval               1000  && milliseconds

    Width = 400
    Height = 150
    MaxButton = .F.
    BorderStyle = 2
    Caption = "Surveiller le répertoir"

    hNotify = INVALID_HANDLE_VALUE
    PathBeingWatched = ""
    
    ADD OBJECT lblTarget As Label WITH;
        Left=10, Top=7, Autosize=.T.

    ADD OBJECT lblAlert As Label WITH;
        Left=10, Top=30, Autosize=.T., Caption="Notification:"

    ADD OBJECT tm As Timer WITH Interval = 0

PROCEDURE  Load
    THIS.decl

FUNCTION  Init (lcPath)
    THIS.PathBeingWatched = FULLPATH (lcPath)

    IF Not THIS.startWatching()
        = MESSAGEB ("Notification handle error.")
        RETURN .F.
    ENDIF

PROTECTED FUNCTION  startWatching
    LOCAL lResult

    * no subdirs watched
    THIS.hNotify = FindFirstChangeNotification (;
        THIS.PathBeingWatched, 0,;
        FILE_NOTIFY_CHANGE_FILE_NAME +;
        FILE_NOTIFY_CHANGE_LAST_WRITE )

    lResult = (THIS.hNotify <> INVALID_HANDLE_VALUE)

    IF lResult
        THIS.lblTarget.Caption = "Surveillé: " +;
            THIS.PathBeingWatched
        THIS.tm.Interval = watchingInterval
    ENDIF
RETURN  lResult

PROTECTED PROCEDURE  continueWatching
    IF FindNextChangeNotification (THIS.hNotify) = 0
        THIS.stopWatching
        = MESSAGEB ("Request error.")
        THIS.Release
    ENDIF
    THIS.tm.Interval = watchingInterval

PROTECTED FUNCTION  stopWatching
    THIS.tm.Interval = 0
    IF THIS.hNotify <> INVALID_HANDLE_VALUE
        = FindCloseChangeNotification (THIS.hNotify)
    ENDIF

FUNCTION  _signaled        && return signaled state
RETURN  (WaitForSingleObject(THIS.hNotify, 0) = WAIT_OBJECT_0)

PROCEDURE  _notify        && notify on event
    THIS.lblAlert.Caption = "Notification: " + TTOC(DATETIME())
    THIS.continueWatching

PROCEDURE  tm.Timer
    IF ThisForm._signaled()
        ThisForm._notify
    ENDIF

PROCEDURE  Destroy
    THIS.stopWatching

PROTECTED PROCEDURE  decl
    DECLARE INTEGER FindFirstChangeNotification IN kernel32;
        STRING lpPathName, INTEGER bWatchSubtree, INTEGER dwNotifyFilter

    DECLARE SHORT FindNextChangeNotification IN kernel32 INTEGER hChangeHandle
    DECLARE SHORT FindCloseChangeNotification IN kernel32 INTEGER hChangeHandle

    DECLARE INTEGER WaitForSingleObject IN kernel32;
        INTEGER hHandle, INTEGER dwMilliseconds
ENDDEFINE

 



Mike Gagnon
jeudi 2 février 2006 à 13:56:46 | Re : Détecter l'ajout ou la modification d'un fichier sur le disque.

ygr2

Il existe pourtant un évènement Windows déclanché lors de la modification d'un répertoire, mais, à priori, il n'est pas récupérable par FoxPro, en tout cas je n'ai pas trouvé d'exemple. Je pense donc qu'on est donc obligé de "surveiller" le répertoire.
Merci


Cette discussion est classée dans : fichier, disque, ajout, modification, étecter


Répondre à ce message

Sujets en rapport avec ce message

code d"ajout,modification et suppression [ par maweni ] bonjour,svp, je suis vraiment stressée et triste , j"ai une soutenance vers le10 juin et j"ai pas encore commencé à programmer parce que on n"a pas ét le browser [ par engelina33 ] bonjour,j'utilise VFP9 pour l'implémentation d'une application, j'ai besoin de créer un browser pour que l'utilisateur sélectionne un fichier excel. j Evaluer une variable string contenant le nom d'une constante [ par louBF ] Bonjour, je débute avec Foxpro. Je développe une petite application qui génère une feuille excel. L'application doit être disponible en anglais et en fenêtre "enregistrer le fichier" [ par dology ] Bonjour, je n'arrive pas à trouver la fonction qui me permettrai d'ouvrir une fenêtre "enregistrer le fichier sous..." exactement comme lorsqu'on télé creation fichier xml avec des branches [ par psmpa ] bonjour, mon problème est le suivant: je dois creer un fichier xml issu d'une table mais avec des jointures representant des branches voici le fichier SQLSERVER COMPACT ET FOXPRO [ par panterga ] Bonjour J'utilise visual studio 2005 en C# pour développer une appli sur PDA , cette application utilise SQLSERVER compact pour stocker des données e erreur de lecture de fichier 1104 [ par stepber ] Bonjour, je continue à avoir des désagréments chez des utilisateurs d'une application VFP9. Pour la 1ère fois, l'un d'eux me signale des erreurs de l Session ouvrant un fichier foxpro [ par amhidi ] Je travaille sur réseau, Comment savoir dans quelle session ou poste une table foxpro est ouverte ? Merci amhidi Numero de Serie physique d'un disque dur [ par mahdi22dz ] Mes Salutations. Il existe des DLL (Ex:GetDiskSerial.dll, HardDiskId.dll ..etc) et des OCX ( SysIfo.ocx etc..) pour récupérer le N° de série du disque Envoit de fichier avec thunderbird [ par rom87 ] Bonjour; Je souhaite joindre un fichier à un mail avec la messagerie pas défaut sur un PC. Ma piste de départ était: email = CreateObject('Wscript.S


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,622 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales