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 :

Vérifier fichier en cours d'écriture?


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut Vérifier fichier en cours d'écriture?
    Bonjour,

    Je vous explique.

    J'ai des gros fichiers vidéos qui arrivent dans un dossier (par un partage réseau, ftp ou autres).
    Une fois que le fichier est là, je veux lancer un traitement (un encodage, ou autres).
    Le problème c'est que c'est des gros fichiers, plusieurs 2 à 5 Go. Donc il faut que j'attend la fin de la copie pour lancer mes traitements.
    Comment connaitre la fin de la copie??
    Je pensai à faire un streamWriter sur le fichier, et tant qu'un erreur est catché, je lance pas... Mais je suis pas sûre de la méthode!
    Comment je pourrai faire ça? Avec un filewatcher?

    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Perso, je pense qu'il suffit de regarder si la taille du fichier change toutes les 30 secondes. En effet lorsque tu télécharges la taille du fichier change
    Ensuite pour le problèmes de coupure de téléchargement, le prog risque de penser que le ld est fini. Il faudra alors avant tout travaille dessus vérifier la validiter du fichier. Je ne sais pas comment on fait cela, mais cela ne doit pas être sorcier.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Les applis qui écrivent ne forment pas des .part. ou ce genre de chose le temps d'envoyer les fichiers ?
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Il faudra alors avant tout travaille dessus vérifier la validiter du fichier. Je ne sais pas comment on fait cela, mais cela ne doit pas être sorcier.
    En faisant un Checksum du fichier peut-être ?

  5. #5
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    Merci de vos réponses.

    Je n'ai pas la main sur les fichiers avant qu'ils soient dans mon répertoire. Pas moyen donc de générer de signature du fichier. Je pense qu'au final, ca va être un partage windows, donc pas de fichier .part non plus :s

    Actuellement, j'ai un filewatcher qui me détecte un nouveau fichier, et une boucle de streamwriter pour tester si j'ai accès...

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Perso, je pense qu'il suffit de regarder si la taille du fichier change toutes les 30 secondes. En effet lorsque tu télécharges la taille du fichier change
    Ce n'est pas toujours vrai, en fonction de ce qui est utilisé pour le transfert, la taille totale du fichier (si elle est connue évidemment) peut déjà être directement allouée au fichier dès le début transfert et les blocs sont ensuite remplis en fonction des packets qui arrivent.
    Franckintosh, penseur différent.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Tout simplement : si la connexion ralentit fortement, la taille ne va pas changer en 30 seconde, mais en 32 : argh!

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Ce n'est pas toujours vrai, en fonction de ce qui est utilisé pour le transfert, la taille totale du fichier (si elle est connue évidemment) peut déjà être directement allouée au fichier dès le début transfert et les blocs sont ensuite remplis en fonction des packets qui arrivent.
    +1
    Je n'y pensais plus. En plus j'utilise un outil pour le dl se comporte comme cela

    Tout simplement : si la connexion ralentit fortement, la taille ne va pas changer en 30 seconde, mais en 32 : argh!
    +1 aussi

    Bon ok :

    La prochaine fois je réflichirais un peu avant de poster
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Tant que le fichier se copie, il est en lecture seul : on peut le tester toutes les 30 secondes? (c'est pas une affirmation, mais une question)

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Cela doit être possible.
    Mais bon dans ce cas là le FileSystemWatcher ne serait il pas adapter au besoin ?
    C'est aussi une question car je ne l'ai pas encore utilisé.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    protected void OnChanged(System.IO.FileSystemEventArgs e)
    Member of System.IO.FileSystemWatcher

    Summary:
    Raises the System.IO.FileSystemWatcher.Changed event.

    Parameters:
    e: A System.IO.FileSystemEventArgs that contains the event data.


    ---


    public System.IO.WatcherChangeTypes ChangeType { get; }
    Member of System.IO.FileSystemEventArgs

    Summary:
    Gets the type of directory event that occurred.

    Returns:
    One of the System.IO.WatcherChangeTypes values that represents the kind of change detected in the file system.


    ---

    Changed
    Member of System.IO.WatcherChangeTypes

    Summary:
    The change of a file or folder. The types of changes include: changes to size, attributes, security settings, last write, and last access time.


    --

    Avec tout ces petits trucs la dont Attributes?


    On te laisse tester hein^^ Trop de boulot là :p

    [edit] pour mieux suivre...

    Ca à l'air ch.. quand meme...
    Au Changed, il faudrait donc vérifier s'il est tjs en lecture seul... C'est un peu lourd non?

  12. #12
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    C'est bon j'ai trouvé une solution.
    Le FileSystemWatcher lève 3 évènements à l'apparition d'un nouveau fichier (Created, et 2 Changed). Je sais pas trop pourquoi 2 Changed, mais je sais qu'à la fin de la copie, il lève un évènement OnChanged car la date de dernière accès est modifié. Donc j'instanci un FileSystemWatcher avec un NotifyFilter = NotifyFilters.LastAccess;
    Et donc, il ne lève d'évènement qu'à la fin de la copie d'un fichier dans mon répertoire.

    Donc pour le code rapidos si ca intéresse quelqu'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = @"c:\dossier_ecouter";
    watcher.NotifyFilter = NotifyFilters.LastAccess;
    watcher.Changed += new FileSystemEventHandler(OnChanged);
     
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
       Console.WriteLine("Fichier prêt");
    }
    Merci pour vos réponses.

    Mathieu

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

Discussions similaires

  1. Comportement suspect lors de la suppression d'un fichier en cours d'écriture sur un montage samba
    Par moonbossa dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 18/03/2011, 18h49
  2. Identifier les fichiers en cours d'écriture par un process ext
    Par sinmaniphel dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/01/2007, 09h22
  3. Réponses: 8
    Dernier message: 23/06/2006, 22h53
  4. [VB.NET] Comment acceder au fichier en cours d'utilisation ?
    Par Aspic dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/02/2006, 16h40
  5. Réponses: 2
    Dernier message: 29/01/2004, 11h05

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