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 :

Scruter un dossier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Par défaut [Résolu] Scruter un dossier
    Bonjour,

    Alors je vous expose mon problème, pour un programme en C

    L'objectif est de scruter un dossier en permanence de telle manière qu'à chaque fois qu'un nouveau fichier .txt arrive, le programme l'envoie immédiatement sur une autre machine pour traitement.

    La partie réseau, càd envoyer le fichier sur une autre machine, je devrais en faire mon affaire, mais j'ai un problème pour scruter le dossier.

    En fait, j'ai regardé ce qu'il existait mais mis à part qques trucs pour lister un dossier je n'ai pas trouvé grand chose.
    Est-ce que qq'un aurait une idée (de génie) pour m'expliquer une manière de faire qui ne soit pas une usine à gaz.

    Note importante, ceci doit se faire sur windows NT.

    Voilà, j'espère avoir été clair.
    Merci pour vos réponses
    Ben

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Ce n'est pas un problème de langage C.
    A mon avis, il y a plus de chance de trouver la réponse dans les API Windows donc forum Développement Windows.

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Par défaut
    OK merci

    En fait, je débute en programmation C sous windows et je maitrise encore pas bien ce qui fait ou non parti de ces API.

    En attendant, je me suis procuré une liste des api windows et je vais chercher ce qu'il peut bien avoir.

    ++

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    L'objectif est de scruter un dossier en permanence
    Il faut faire un deamon et dans ce cas c'est du dévellopement Windows.

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Par défaut
    Trap D> Super ! Merci beaucoup, c'est agréable de partir faire un we de rando et de revenir avec la moitié du travail fait.
    J'ai adapté son code ... ça marche presque tout !
    Je verrai tout ça demain à tête reposée mais encore merci

    seriousme> Non je n'ai pas besoin que le programme tourne en tâche de fond ...

  7. #7
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Par défaut
    Pour ceux que ca pourrait intéresser, voici qq chose qui me trouve tous les fichiers qui se créent dans un dossier en utilisant ReadDirectoryChangesW.

    Ensuite, en analysant l'extension, je sais si c'est un fichier texte => ça c'est basique.

    Note, il est aussi possible de répérer des modifications, des suppressions et tout plein d'autres trucs (se référer à la doc de l'API windows)
    Merci à : http://nienie.com/~masapico/api_ReadDirectoryChangesW.html

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <winbase.h>
    #include <malloc.h>
     
    void main(int argc, char *argv[]) {
     
        BOOL bResult;
        HANDLE hDir;
        BYTE Buf[10000];
        DWORD RetBytes;
        FILE_NOTIFY_INFORMATION *pInfo;
        DWORD i = 0;
     
        while(1) {
            hDir = CreateFile(
                "C:\\Program Files\\Microsoft Visual C++ Toolkit 2003\\Hello",
                FILE_LIST_DIRECTORY,
                FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                NULL,
                OPEN_EXISTING,
                FILE_FLAG_BACKUP_SEMANTICS,
                NULL);
     
     
            bResult = ReadDirectoryChangesW(
                hDir,
                Buf,
                10000,
                FALSE,
                FILE_NOTIFY_CHANGE_FILE_NAME,
                &RetBytes,
                NULL,
                NULL);
     
            for(;;) {
                pInfo = (FILE_NOTIFY_INFORMATION *)&Buf[i];
     
                switch(pInfo->Action) {
                    case FILE_ACTION_ADDED: 
                        NewFile(pInfo);
                        break;
                    default: printf("file skipped\n");
                }
     
                if(pInfo->NextEntryOffset == 0) break;
                i += pInfo->NextEntryOffset;
            };
     
            CloseHandle(hDir);
     
        }
     
    }
     
     
    int NewFile(FILE_NOTIFY_INFORMATION *pInfoFic) {
     
        WCHAR * fileName;
     
        printf("file added: ");
        fileName = malloc (pInfoFic->FileNameLength + sizeof(WCHAR) );
        memcpy(fileName, pInfoFic->FileName,pInfoFic->FileNameLength);
        fileName[pInfoFic->FileNameLength / sizeof(WCHAR)] = '\0';
        wprintf(L"%s\n", fileName);
     
        if ( (fileName[pInfoFic->FileNameLength / sizeof(WCHAR) - 4] == '.') && (fileName[pInfoFic->FileNameLength / sizeof(WCHAR) - 3] == 't') && (fileName[pInfoFic->FileNameLength / sizeof(WCHAR) - 2] == 'x') && (fileName[pInfoFic->FileNameLength / sizeof(WCHAR) - 1] == 't') ) {
            printf("c'est un fichier texte\n");
        }
     
     
        free(fileName);
        return 1;
    }

Discussions similaires

  1. Que doit contenir un dossier de programmation ?
    Par b30ff dans le forum Débats sur le développement - Le Best Of
    Réponses: 11
    Dernier message: 26/06/2004, 19h09
  2. Verifier qu'un dossier existe (batch)
    Par kakou dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/01/2003, 13h46
  3. Réponses: 4
    Dernier message: 07/12/2002, 15h24
  4. Comment vider un dossier ?
    Par Zinoc dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/06/2002, 14h14
  5. Permission sur un dossier
    Par Bjorn dans le forum C
    Réponses: 6
    Dernier message: 25/06/2002, 12h56

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