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

VB.NET Discussion :

Déplacer fichier en cours d'utilisation [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 109
    Par défaut Déplacer fichier en cours d'utilisation
    Bonjour,

    Petite question de débutant à nouveau:

    Je réceptionne un fichier dans un répertoire. Lorsqu'il est en place, je le traite avec un logiciel d'image (nconvert). Puis je veux le déplacer dans un autre répertoire. Or je ne sais pas comment faire en sorte d'attendre que le traitement de l'image ait fini pour le déplacer.

    Pour l'instant que suis arrivé à cela qui ne marche pas puisque, je suppose, j'entre dans une boucle infinie:

    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
        Private Sub FileSystemWatcher2_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher2.Created
            Dim nomfichier2 As String
            Dim exep As String
     
            nomfichier2 = e.Name
            FileSystemWatcher2.WaitForChanged(IO.WatcherChangeTypes.Created, 100)
            Shell("c:\nconvert.exe -out jpeg -xflip -rotate 90 -crop " + hauteurA + " " + hauteurB + " " + largeurA + " " + largeurB + " -resize 350 400 -efocus -autolevels -noise reduce -overwrite C:\photosjpg\Photostemp\" + nomfichier2)
            FileSystemWatcher2.WaitForChanged(IO.WatcherChangeTypes.Changed, 100)
            If File.Exists("C:\photosjpg\Photosacontroler\" + e.Name) Then
                File.Delete(("C:\photosjpg\Photosacontroler\" + e.Name))
            End If
            exep = ""
            Do
                Try
                    File.Move("C:\photosjpg\Photostemp\" + e.Name, "C:\photosjpg\Photosacontroler\" + e.Name)
                Catch ex As IOException
                    exep = ex.ToString
                  '  MsgBox(ex.ToString)
                End Try
            Loop Until exep = ""
        End Sub
    Quelqu'un saurait'il comment faire?

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 197
    Par défaut
    FileSystemWatcher2.WaitForChanged(IO.WatcherChangeTypes.Changed, 100)
    100 millisecondes c'est pas un peu court comme timeout?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Try
                    File.Move("C:\photosjpg\Photostemp\" + e.Name, "C:\photosjpg\Photosacontroler\" + e.Name)
                Catch ex As IOException
                    exep = ex.ToString
                  '  MsgBox(ex.ToString)
                 System.Thread.Sleep(1000) 'j'attend 1 seconde avant de ressayer
                End Try

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 109
    Par défaut
    Disons que je réitère l'opération plusieurs fois, donc que je ne peux pas attendre 1 seconde à chaque fois. De plus, je ne peux pas me permettre de compter sur le timeout sachant que l'application va être installée sur différents ordinateurs donc avec des délais différents pour chacun.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 197
    Par défaut
    ben ici j'ai un doute que ton FileSystemWatcher2.WaitForChanged(IO.WatcherChangeTypes.Changed, 100)
    servent sauf si l'opération prend moins de 100 millisecondes

    et tu boucles en permanance sur le move pas très optimiser...

    Je suppose que tu sais combien de temps prendre +- l'opration
    si c'est en général 1 sec je mettrai un timeout de 10 sec

    tu fais un test du result du FileSystemWatcher2.WaitForChanged(IO.WatcherChangeTypes.Changed, 10000)
    si sorti par le timeout message pour avertir que nconvert n'a pas réussi

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 109
    Par défaut
    Bonjour,

    merci pour l'info, je pensais que le Waitforchange était justement là pour attendre la fin de l'opération. De toutes façons, j'ai contourné le problème en externalisant la procédure complètement dans un batch.

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

Discussions similaires

  1. Samba / fichier en cours d'utilisation
    Par dycobe dans le forum Réseau
    Réponses: 2
    Dernier message: 05/03/2008, 09h19
  2. [D7] Lire un fichier en cours d'utilisation
    Par bibi26 dans le forum Delphi
    Réponses: 3
    Dernier message: 05/07/2007, 10h00
  3. [DOM] Fichier en cours d'utilisation - Suppression impossible
    Par schniouf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 15/12/2006, 13h58
  4. Fichier en cours d'utilisation
    Par kendras dans le forum C
    Réponses: 9
    Dernier message: 29/11/2006, 11h45
  5. [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

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