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 :

Gestion de processus


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut Gestion de processus
    Bonjour !
    Je souhaiterais effacer un fichier pour lequel j'effectue un traitement préalable. J'ai survolé le forum et le net mais n'ai pas trouvé de réponses adéquate à mes attentes...
    Voici le code de mon application:
    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
        private void btnOK_Click(object sender, EventArgs e)
            {
                picnumber = 0;
                string nom = ConfigurationManager.AppSettings[0]; //récupération du répertoire dépot des fichiers scannés
                DirectoryInfo dir = new DirectoryInfo(nom);
                FileInfo[] file = dir.GetFiles();
                int cpt = 0;
                foreach (FileInfo fi in file)
                {
                    if (cpt == 0)
                    {
                        doMultipageTiffSave(nom + "\\Num_GAP.tiff");//création d'un tiff multipage "hote"
                    }
                    else
                    {
                        if (fi.Name != "Num_GAP.tiff")
                        {
                            doExistingFileSave(nom + "\\Num_GAP.tiff");//insertion des autres images dans le tiff généré en premier
                            cpt++;
     
                        }
                    }
     
                }
     
       // Envoi du fichier tiff multipage
     
                //Vidage du répertoire de stockage des fichiers scannés
     
                 foreach (string f in Directory.GetFiles(nom))
                    {
                        try
                        {   
                            File.Delete(f);
                        }
                        catch (Exception ere)
                        {
                            MessageBox.Show(ere.ToString());
                        }
                    }
    }
    Pour commentaires, j'ai un répertoire contenant des fichiers image. Je le parcours dans un premier temps pour générer un fichier TIFF multipage et je voudrais ensuite supprimer ces fichiers une fois que ce tiff multipage a été envoyé là où je le souhaite.
    Mais lors de la tentative de suppression, j'ai un message d'erreur disant que le fichier image est toujours en cours d'utilisation par un autre processus...

    Quelqu'un aurait-il une solution pour m'aider ??

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    tu oublis de faire un close de ton fichier quelque part...

    Le best practice dans ton cas est d'utiliser un using{ }, le close se fera automatiquement apres la fermeture de l'accolade.

  3. #3
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    tu as pensé à fermer ton fichier avant de le supprimer?

    edit : grilled
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    J'avoue que je suis débutant en C# ... après mon parcours de fichier un fi.Close() ne marchait pas ...

    Quelqu'un pourrait-il m'éclairer sur l'utilisation de ce using svp ??

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                using (StreamReader sr = new StreamReader("TestFile.txt")) 
                {
                    string line;
                    // Read and display lines from the file until the end of 
                    // the file is reached.
                    while ((line = sr.ReadLine()) != null) 
                    {
                        Console.WriteLine(line);
                    }
                }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Merci j'avais trouvé cet extrait de code là... mais un StreamReader est-il valable pour des fichiers images ?
    Ce sont des TIFF que je traite ...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    Ba j'en sais rien...

    ca depend de l'objet que t 'utilises en ce moment ?

    le using est valable pour d'autre chose que les StreamReader...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    A priori sur le peu de docs que j'ai vu StreamReader ne s'applique sur des fichiers textes....
    QUelqu'un a-t-il autre chose à me proposer ??

  9. #9
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    regarde du côté de la bibliothèque FileStream, je m'en sers pour mon stream de PDF et ça marche très bien. Je crois que c'est du générique pour la lecture de fichier tout type.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Merci pour toutes vos remarques...

    J'ai remplacé la première phase de parcours des fichiers ainsi:
    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
                for (int i = 0; i < file.Length; i++)
                {
                    FileStream fr;
                    fr = file[i].OpenRead();
                    if (cpt == 0)
                    {
                        doMultipageTiffSave(nom + "\\Num_GAP.tiff");//création d'un tiff multipage "hote"
                    }
                    else
                    {
                        if (file[i].Name != "Num_GAP.tiff")
                        {
                            doExistingFileSave(nom + "\\Num_GAP.tiff");//insertion des autres images dans le tiff généré en premier
                            cpt++;
     
                        }
                    }
                    fr.Close();
                }
    J'ai malheureusement toujours la même erreur concernant les processus ...

  11. #11
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    je vois que tu n'ouvres pas ton fileStream

    Il te faudrait faire quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fr = new FileStream(File[i]);
    dans ton tableau File[], est-ce que c'est le nom du fichier qui est stocké, ou le chemin d'accès complet?
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Il s'agit juste du nom de fichier

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Bon en fait j'ai continué à réfléchir sur mon problème... et visiblement ce n'est pas ici qu'est le soucis...

    Pour recadrer le contexte, j'ai une IHM. Je clique sur un bouton de traitement qui effectue donc une opération. Je clique ensuite un bouton de validation qui doit me permettre de supprimer mes fichiers.

    Comment puis-je "purger" et libérer les ressources de manière automatique à la fin de mon traitement pour pouvoir supprimer mes fichiers automatiquement...
    Il s'agit de fichier .tiff que je veux supprimer...

    Donc voilà si quelqu'un pouvait éventuellement m'aider ... ça serait sympa

  14. #14
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    dans ces cas là il te faut changer ta déclaration d'ouverture de FileStream par

    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
     
      for (int i = 0; i < file.Length; i++)
                {
                    //Lorsque tu déclares un nouvel objet, tu dois l'instancier avec la commande new, cela l'ouvre et le charge en mémoire.
                    FileStream fr = new FileStream("monAdresseFichier" + File[i]);
                    //n'oublie pas l'adressage du dossier d'où provient ton fichier. ex : "c:\\monFichier".
                    if (cpt == 0)
                    {
                        doMultipageTiffSave(nom + "\\Num_GAP.tiff");//création d'un tiff multipage "hote"
                    }
                    else
                    {
                        if (file[i].Name != "Num_GAP.tiff")
                        {
                            doExistingFileSave(nom + "\\Num_GAP.tiff");//insertion des autres images dans le tiff généré en premier
                            cpt++;
     
                        }
                    }
                    fr.Close();
                }
    Cordialement.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Merci de ta réponse ... mais je crois que le soucis ne vient pas de ce coin là ...
    Enfin je vais regarder déjà avec ce que tu m'as mis
    Si quelqu'un a une idée sur là où je pense que se situe le problème

  16. #16
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Je ne sais pas ce que vous bricolez, mais il me semble que cela ne sert à rien d'ouvrir des stream et autre choses.....
    Dans le code que l'on voit, on utilise que le nom du fichier mais en aucun cas on n'ouvre ce fichier...
    Donc pas besoin de le fermer (ben voyon...)
    Il serait beaucoup plus intéressant de savoir ce que fait doMultipageTiffSave().
    Et c'est probablement là que le fichier n'est pas fermé correctement.....

  17. #17
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Il n'est carrément pas ouvert le fichier, ni même exploité, c'est là le hic. Tu demandes à créer un fichier tiff, mais nul part tu ne précises quel fichier est exploité.

    pphil à raison, il faudrait que tu nous transmettes les codes de tes 2 fonctions, celles qui ajoute et celle qui crée le fichier de base.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Je vois ce que vous voulez dire ...
    Le but de mon programme est de numériser des docs et de les stocker, puis de les envoyer sur un serveur.
    L'IHM me permet de numériser à partir d'un bouton et envoyer avec un autre.
    Mais en fait en bidouillant un peu, je me rends compte que les fichiers sont bien numérisés et bien stockés là où je veux, mais lorsque la numérisation est finie, les fichiers ne sont pas supprimables à la main car on me dit qu'ils sont déjà utilisés par un processus ... Donc je pense que le problème vient de là...

    voici le code des différentes méthodes utilisées:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
       private void btnNumeriser_Click(object sender, EventArgs e)
            {
                if (!msgfilter)
                {
                    this.Enabled = false;
                    msgfilter = true;
                    Application.AddMessageFilter(this);
                }
                tw.FastAcquire();
            }
     
            public void FastAcquire()
            {
                InternatAcquire(0);
            }
     
           public void InternatAcquire(int mode)
            {
                TwRC rc;
                CloseSrc();
                if (appid.Id == IntPtr.Zero)
                {
                    Init(hwnd);
                    if (appid.Id == IntPtr.Zero)
                        return;
                }
                rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.OpenDS, srcds);
                if (rc != TwRC.Success)
                    return;
     
                TwCapability cap = new TwCapability(TwCap.XferCount, 1);
                rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);
                if (rc != TwRC.Success)
                {
                    CloseSrc();
                    return;
                }
     
                TwUserInterface guif = new TwUserInterface();
                guif.ShowUI = (short)mode;
                guif.ModalUI = 1;
                guif.ParentHand = hwnd;
                rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif);
                if (rc != TwRC.Success)
                {
                    CloseSrc();
                    return;
                }
            }
     
     
            bool IMessageFilter.PreFilterMessage(ref Message m)
            {
                TwainCommand cmd = tw.PassMessage(ref m);
                if (cmd == TwainCommand.Not)
                    return false;
     
                switch (cmd)
                {
                    case TwainCommand.CloseRequest:
                        {
                            EndingScan();
                            tw.CloseSrc();
                            break;
                        }
                    case TwainCommand.CloseOk:
                        {
                            EndingScan();
                            tw.CloseSrc();
                            break;
                        }
                    case TwainCommand.DeviceEvent:
                        {
                            break;
                        }
                    case TwainCommand.TransferReady:
                        {
                            ArrayList pics = tw.TransferPictures();
                            EndingScan();
                            tw.CloseSrc();
                            picnumber++;
                            for (int i = 0; i < pics.Count; i++)
                            {
                                IntPtr img = (IntPtr)pics[i];
                                PicForm newpic = new PicForm(img);
                                string nom = ConfigurationManager.AppSettings[0];
                                String name = nom+"\\Scan_"+picnumber.ToString()+".tiff";
     
                                Gdip.SaveDIBAs(name, newpic.bmpptr, newpic.pixptr);  
                                createPanel(name);                           
                            }
                            break;                      
                        }
                }           
                return true;
            }
     
     
     
            public static bool SaveDIBAs(string picname, IntPtr bminfo, IntPtr pixdat)
            {           
                Guid clsid;
                GetCodecClsid(picname, out clsid);
                IntPtr img = IntPtr.Zero;
                int st = GdipCreateBitmapFromGdiDib(bminfo, pixdat, ref img);
                if ((st != 0) || (img == IntPtr.Zero))
                    return false;
     
                st = GdipSaveImageToFile(img, picname, ref clsid, IntPtr.Zero);
                GdipDisposeImage(img);
                return st == 0;
            }
     
            [DllImport("gdiplus.dll", ExactSpelling = true)]
            internal static extern int GdipDisposeImage(IntPtr image);
    C'est assez brutal ... j'avoue
    C'est une partie de code que j'ai récupéré d'un pilote twain codé en C# qui fonctionne "classiquement". Scan, puis affichage temporaire puis save As.

    Voilà ... je suis pas sûr que ça vous aide mais bon ...

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Bon après avoir pourri le forum de mon blocage, j'ai fini par trouver la solution au problème...

    C'était en fait ma méthode createpanel qui posait problème et qui ne libérait pas les ressources !!!

    Merci à tous ceux qui se sont dérangés à me répondre

  20. #20
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    edit : avait pas vu le tag..
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

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

Discussions similaires

  1. [DB400][Débutant]comprendre la gestion des processus actif
    Par horalass dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 12/12/2006, 10h26
  2. [Système] gestion des processus linux
    Par julien.63 dans le forum Langage
    Réponses: 6
    Dernier message: 18/11/2006, 00h16
  3. gestion des processus
    Par solawe dans le forum Windows
    Réponses: 2
    Dernier message: 17/11/2006, 13h04
  4. Gestion de processus
    Par belarbi.alex dans le forum Administration système
    Réponses: 5
    Dernier message: 24/11/2005, 15h24
  5. [VB.NET] Gestion de processus
    Par Lahouari dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/03/2005, 10h17

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