IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Probléme pour récuperer le nom du Fichier API Windows


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut Probléme pour récuperer le nom du Fichier API Windows
    Bonjour,

    j'ai créé une fonction de monitoring de répertoire, tous compile bien, elle marche.

    Mais j'aurai besoin de récupérer le nom du fichier qui a était créé et je ne c'est absolument pas comment faire.


    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void RefreshDirectory(LPTSTR lpDir)
    {
     
       _tprintf(TEXT("Directory (%s) changed.\n"), lpDir);
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    DWORD dwWaitStatus; 
    HANDLE dwChangeHandles[2]; 
     
     
     
    dwChangeHandles[0] = FindFirstChangeNotification( 
        "D:\\Documents and Settings\\A159754\\Bureau\\serveur\\rapport",                
        FALSE,                        
        FILE_NOTIFY_CHANGE_FILE_NAME);  
     
    if (dwChangeHandles[0] == INVALID_HANDLE_VALUE) 
        ExitProcess(GetLastError()); 
     
     
     
    dwChangeHandles[1] = FindFirstChangeNotification( 
        "D:\\Documents and Settings\\A159754\\Bureau\\serveur\\rapport",                        
        TRUE,                          
        FILE_NOTIFY_CHANGE_DIR_NAME);  
     
    if (dwChangeHandles[1] == INVALID_HANDLE_VALUE) 
        ExitProcess(GetLastError()); 
     
     
     
    while (TRUE) 
    { 
     
     
     
        dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, 
            FALSE, INFINITE); 
     
        switch (dwWaitStatus) 
        { 
            case WAIT_OBJECT_0: 
     
                RefreshDirectory("D:\\Documents and Settings\\A159754\\Bureau\\serveur\\rapport"); 
                if ( FindNextChangeNotification( 
                        dwChangeHandles[0]) == FALSE ) 
                    ExitProcess(GetLastError()); 
                    cout<< "coucou4";
                break; 
     
            case WAIT_OBJECT_0 + 1: 
     
                RefreshTree("D:\\Documents and Settings\\A159754\\Bureau\\serveur\\rapport"); 
                if (FindNextChangeNotification( 
                        dwChangeHandles[1]) == FALSE) 
                    ExitProcess(GetLastError());
     
                break; 
     
            default: 
                ExitProcess(GetLastError()); 
        }
    }

    Si vous avez une idée ou une solution je suis preneur.

    Cordialement

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    As-tu regardé du côté du MSDN et en particulier de ReadDirectoryChangesW ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    oui, j'ai regarder sur msdn vu que j'ai utilisé les fonction associé a windows.h.
    Je m'en suis beaucoup inspirer.

    je check bien les modification de mon fichier (ajouter,renommer,suppression).


    Actuellement mon code me remonte une alerte pour c'est 3 cas.



    Mais pour continué mon programme, il me faudrait le nom du fichier, afin de pouvoir l'envoyer par l'intermédiaire de ma socket.


    Cordialement

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par thanks33 Voir le message
    oui, j'ai regarder sur msdn vu que j'ai utilisé les fonction associé a windows.h.
    Je m'en suis beaucoup inspirer.

    je check bien les modification de mon fichier (ajouter,renommer,suppression).


    Actuellement mon code me remonte une alerte pour c'est 3 cas.



    Mais pour continué mon programme, il me faudrait le nom du fichier, afin de pouvoir l'envoyer par l'intermédiaire de ma socket.


    Cordialement
    Visiblement, combiner ReadDirectoryChangesW et FindFirstChangeNotification ne semble pas fonctionner de façon aussi trivial que ne l'indique le MSDN
    En faisant quelques recherches sur google avec "ReadDirectoryChangesW", il y a des entrées avec des exemples. Tu devrais jeter un coup d'oeil là dessus.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Par défaut
    merci pour ton aide,


    je ne suis peu être pas très doué mais je n'ai toujours pas réussie.


    Help me please


    Cordialement

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #include <windows.h>
    #include <string>
    #include <iostream>
     
    void WatchDirectory(LPTSTR lpDir);
    int main()
    {
       TCHAR Directory[MAX_PATH];
       GetCurrentDirectory(MAX_PATH,Directory);
       WatchDirectory(Directory);
     
       return 0;
    }
     
    struct ScopedLockHandle
    {
       ScopedLockHandle(HANDLE h_)
          :m_handle(h_)
       {}
       ~ScopedLockHandle()
       {CloseHandle(m_handle);}
    private:
       HANDLE m_handle;
    };
     
    void WatchDirectory(LPTSTR lpDir)
    {
      HANDLE hDir = CreateFile( 
        lpDir,
        FILE_LIST_DIRECTORY,
        FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS,
        NULL
      );
      if(hDir){
         ScopedLockHandle scoped(hDir);
         const unsigned nbr_item=1024;
         FILE_NOTIFY_INFORMATION Buffer[nbr_item];
         DWORD BytesReturned;
         while( ReadDirectoryChangesW(
            hDir,
            &Buffer,
            sizeof(Buffer),
            TRUE, /* monitoring option */
            FILE_NOTIFY_CHANGE_SECURITY|
            FILE_NOTIFY_CHANGE_CREATION|
            FILE_NOTIFY_CHANGE_LAST_ACCESS|
            FILE_NOTIFY_CHANGE_LAST_WRITE|
            FILE_NOTIFY_CHANGE_SIZE|
            FILE_NOTIFY_CHANGE_ATTRIBUTES|
            FILE_NOTIFY_CHANGE_DIR_NAME|
            FILE_NOTIFY_CHANGE_FILE_NAME, /* filter conditions */
            &BytesReturned, /* bytes returned */
            NULL, /* overlapped buffer */
            NULL))
         {
            FILE_NOTIFY_INFORMATION *p_cur = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(&Buffer[0]);
            do{
               switch(p_cur->Action)
               {
               case FILE_ACTION_ADDED:
                  std::wcout<<L"File added : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
                  break;
               case FILE_ACTION_REMOVED:
                  std::wcout<<L"File removed : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
                  break;
               case FILE_ACTION_MODIFIED :
                  std::wcout<<L"File modified : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
                  break;
               case FILE_ACTION_RENAMED_OLD_NAME :
                  std::wcout<<L"File renamed old name : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
                  break;
               case FILE_ACTION_RENAMED_NEW_NAME :
                  std::wcout<<L"File rename new name : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
                  break;
               default:
                  std::wcout<<L"File unknown : "<<std::wstring(p_cur->FileName,p_cur->FileNameLength/sizeof(p_cur->FileName[0]))<<std::endl;
                  break;
               }
               p_cur = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(reinterpret_cast<unsigned char*>(p_cur) + p_cur->NextEntryOffset);
            }while(p_cur->NextEntryOffset>0);
         }
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2014, 17h43
  2. Problèmes pour accéder aux tags de fichiers sous windows xp
    Par clakinette dans le forum Windows XP
    Réponses: 1
    Dernier message: 14/08/2008, 17h18
  3. Réponses: 2
    Dernier message: 19/12/2006, 18h37
  4. Réponses: 2
    Dernier message: 20/03/2006, 20h56
  5. Problème pour faire une copie de fichier.
    Par damien99 dans le forum C++
    Réponses: 1
    Dernier message: 12/02/2006, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo