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 :

Erreur je comprends pas pourquoi!


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Erreur je comprends pas pourquoi!
    Bonjour a tous.
    j'ai un problème sur un petit bout de code.
    j'ai une erreur de ce type :
    Une exception non gérée du type 'System.IO.IOException' s'est produite dans mscorlib.dll

    Informations supplémentaires*: Impossible de créer un fichier déjà existant.

    au départ les répertoires sont vide.
    je télécharge le fichier csv.
    il le fait le job, mais ne retourne pas en attente...

    si une âme charitable peut me dire ou j'ai merder...

    voila le code en question...

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.IO;
    using System.Diagnostics;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main()
            {
                Run();
            }
            public static void Run()
            {
     
                FileSystemWatcher Watcher = new FileSystemWatcher();
                Watcher.Path = @"C:\dwn";
                Console.WriteLine("Sureveillance du repertoire : " + Watcher.Path);
                Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
                Watcher.Filter = "*.csv";
                Watcher.Created += new FileSystemEventHandler(OnChanged);
     
     
                Watcher.EnableRaisingEvents = true;
     
                Console.WriteLine("Appuyer \'q\' pour quitter... ");
                while (Console.Read() != 'q') ;
            }
            private static void OnChanged(object source, FileSystemEventArgs e)
            {
                string targetgls = @"C:\gls1";
                string targetposte = @"C:\poste";
                string filename = e.Name;
                string debut = filename.Substring(0, 3);
                string origine = e.FullPath;
                Console.WriteLine("Fichier " + e.FullPath + " " + e.ChangeType);
                Console.WriteLine("Fichier : " + origine);
     
     
     
                if (debut == "lap")
                {
                    System.IO.File.Copy((e.FullPath), targetposte);
                    Console.WriteLine("Fichier copier dans le repertoire poste");
                    System.IO.File.Delete(e.FullPath);
                    Console.WriteLine("Fichier supprimer du repertoire : " + e.FullPath);
     
                }
                if (debut == "gls")
                {
     
                    Console.WriteLine("Fichier copier dans le repertoire gls");
                    System.IO.File.Move((e.FullPath), targetgls + "\\" + filename);
     
     
                }
     
     
            }
        }
    }

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    J'ai pas vraiment regarder en détails mais pour que ton coller marche si le fichier existe déjà il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.IO.File.Copy((e.FullPath), targetposte, true);

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    ouiap bonne idée, mais ça veut quand même dire qu'il écrit plusieurs fois...

    comprend pas

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    A mon avis tu devrait mettre un point d’arrêt dans ta fonction OnChanged, l’événement doit être déclencher plusieurs fois.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    c'est encore plus grave que ce que je pensais...
    je suis une triple buse...

    rien ne marche, je suis a cours d'idées, je connais pas suffisamment c# et je galère grave...

    voile en fait ce que je dois faire.

    j'ai coder une appli en php qui créer et télécharge un fichier csv qui contient les coordonnés d'un client.
    je dois ensuite envoyer ce fichier a un autre logiciel (winexpe ou inet) qui sont des logiciels d'impression d’étiquettes d'envoie de colis.
    donc en fonction du transporteur (la poste ou GLS) je dois déplacer le fichier pour le mettre dans le répertoire correspondant (si fichier = poste-xxx.csv répertoire la poste, si gls-xxxx.csv repertoire gls)

    en plus de ca je dois récupérer le nom dans le fichier csv et l'envoyer en requête sql dans la base hyperfilesql afin de récupérer le numéro de suivi correspondant..

    voila pour l'instant ou en est mon code et j'ai des erreurs du type (je peux pas ouvrir le fichier car il est utilisé) je vois pas ou mais bon...
    si quelqu'un peu m'aiguiller, je lui en serais éternellement reconnaissant ...

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.IO;
    using System.Diagnostics;
    using System.Data.Odbc;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main()
            {
                Run();
            }
            public static void Run()
            {
                FileSystemWatcher Watcher = new FileSystemWatcher();
                Watcher.Path = @"C:\dwn";
                Console.WriteLine("Sureveillance du repertoire : " + Watcher.Path);
                Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
                Watcher.Filter = "*.csv";
     
                Watcher.Created += new FileSystemEventHandler(OnChanged);           
                Watcher.EnableRaisingEvents = true;           
                Console.WriteLine("Appuyer \'q\' pour quitter... ");
                while (Console.Read() != 'q') ;
            }
     
            public static void OnChanged(object source, FileSystemEventArgs e)
            {
     
                string targetgls = @"C:\gls1";
                string targetposte = @"C:\poste";
                string filename = e.Name;
                string debut = filename.Substring(0, 3);
                string origine = e.FullPath;
                Console.WriteLine("Fichier " + e.FullPath + " " + e.ChangeType);
                Console.WriteLine("Fichier : " + origine);
                if (debut == "lap")
                {
                    System.IO.File.Copy((e.FullPath), targetposte);
                    Console.WriteLine("Fichier copier dans le repertoire poste");
                    System.IO.File.Delete(e.FullPath);
                    Console.WriteLine("Fichier supprimer du repertoire : " + e.FullPath);
                }
                if (debut == "gls")
                {
                    try
                    {
                        System.IO.File.Copy((e.FullPath), (targetgls + "\\" + filename), true);
                        verif(targetgls + "\\" + filename);
                        Console.WriteLine("Fichier copier dans le repertoire gls");
                        System.IO.File.Delete((e.FullPath));
                    }
                    catch (IOException Copyerror)
                    {
                        Console.WriteLine(Copyerror.Message);
                    }               
                }            
            }
            public static void OnChanged(FileSystemEventHandler Watcher)
            {
     
            }
     
            private static void OnError(Object source, ErrorEventArgs e)
            {
                Exception ex = e.GetException();
                Console.WriteLine(ex.ToString());
            }
     
            private static void verif(string fullpath)
            {
                string line;
                System.IO.StreamReader file = new System.IO.StreamReader(fullpath);
                while((line = file.ReadLine()) !=null)
                {
                    string [] split = line.Split(new Char [] {';'});
                    Console.WriteLine(split[3]);
                }          
            }
     
     
            private static void accesbdd(string valeur)
            {
                try
                {
                    OdbcConnection bdd = new OdbcConnection("Driver={HyperFileSQL};REP=C:\\GLS\\winexpe6\\DAT\\bddHF\\");
                    bdd.Open();
                    OdbcCommand sql = new OdbcCommand("SELECT SHIPMENT.GLSTRACKID, SHIPMENT.NAME FROM SHIPMENT WHERE ", bdd);
                    OdbcDataReader donnees = sql.ExecuteReader();
                    int i = 0;
                    while (donnees.Read())
                    {
                        i = i + 1;
                        Console.WriteLine("\t{0}\t{1}\t{2}", i, donnees.GetString(0), donnees.GetString(1));
                    }
                    donnees.Close();
                    bdd.Close();
                }
                catch (OdbcException eExcpt)
                {
                    Console.WriteLine("Source = " + eExcpt.Source);
                    Console.WriteLine("Message = " + eExcpt.Message);
                }
                Console.ReadLine();  
            }
        }
    }

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Quand un fichier est créer, pendant un bref instant il est en cours d'utilisation.
    Ce que tu peux faire pour être sûre de ne pas te prendre une exception, c'est de vérifier si il est utilisé et en fonction tu le copie colle ou non.
    [Edit]
    Je me rappelais bien que j'avais eu un problème du genre.

    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
     
    protected virtual bool IsFileLocked(FileInfo file)
    {
        FileStream stream = null;
     
        try
        {
            stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
        }
        catch (IOException)
        {
            //the file is unavailable because it is:
            //still being written to
            //or being processed by another thread
            //or does not exist (has already been processed)
            return true;
        }
        finally
        {
            if (stream != null)
                stream.Close();
        }
     
        //file is not locked
        return false;
    }
    voila une fonction qui te permettra de verifier si ton fichier est en cours d'utilisation. Il te suffit de faire une boucle tant que le fichier est occupé pour le deplacer quand IsFileLocked() passe à false

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Bon ca marche un peu mieux.
    en fait c'est ma méconnaissance de la façon de créer une fonction en C# qui faisait que ca merder....

    je laisse le code des fois que...
    surement perfectible si une idée ce présente je prend

    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
    117
    118
    119
    120
    121
    122
    123
    124
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.IO;
    using System.Diagnostics;
    using System.Data.Odbc;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main()
            {
                Run();
            }
            public static void Run()
            {
                /**********************creation de l'objet watcher*************************************/
                FileSystemWatcher Watcher = new FileSystemWatcher();
                /***********************parametrage de l'objet watcher*********************************/
                Watcher.Path = @"C:\dwn";
                Console.WriteLine("Sureveillance du repertoire : " + Watcher.Path);
                Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
                Watcher.Filter = "*.csv";
                /*******************************************si un fichier csv est creer...*******************/
                Watcher.Created += new FileSystemEventHandler(OnChanged);
                Watcher.EnableRaisingEvents = true;
                /*******************************************tant que pas Q fait****************************/
                Console.WriteLine("Appuyer \'q\' pour quitter... ");
                while (Console.Read() != 'q') ;
            }
     
            /********************************************methode onchaged************************************/
            public static void OnChanged(object source, FileSystemEventArgs e)
            {
                /**************************************destination poste et gls***************************/
                string targetgls = @"C:\gls1";
                string targetposte = @"C:\poste";
                string filename = e.Name;
                string debut = filename.Substring(0, 3);
                string origine = e.FullPath;
                Console.WriteLine("Fichier " + e.FullPath + " " + e.ChangeType);
                Console.WriteLine("Fichier : " + origine);
                /*************************************si debut nom fichier lap = poste si debut nom fichier = gls alors gls***********/
                if (debut == "lap")
                {
                    try
                    {
                        System.IO.File.Copy((e.FullPath), (targetposte + "\\" + filename), true);
                        verif(e.FullPath);
                        Console.WriteLine("Fichier copier dans le repertoire Poste");
                    }
                    catch (IOException Copyerror)
                    {
                        Console.WriteLine(Copyerror.Message);
                    }                
                }
                if (debut == "gls")
                {
                    try
                    {
                        System.IO.File.Copy((e.FullPath), (targetgls + "\\" + filename), true);
                        verif(e.FullPath);
                        Console.WriteLine("Fichier copier dans le repertoire gls");
                    }
                    catch (IOException Copyerror)
                    {
                        Console.WriteLine(Copyerror.Message);
                    }
                }
            }   
            /************************gestion erreurs*************************************/
            private static void OnError(Object source, ErrorEventArgs e)
            {
                Exception ex = e.GetException();
                Console.WriteLine(ex.ToString());
            }
            /**************************methode recupere la ligne du csv***************************/
            private static void verif(string fullpath)
            {
                string line;
                System.IO.StreamReader file = new System.IO.StreamReader(fullpath);
                while ((line = file.ReadLine()) != null)
                {
                    string[] split = line.Split(new Char[] { ';' });
                    Console.WriteLine(split[2]);
                    string nom = split[2];
                    /************************demande le numero suivi a la methode accessbdd*****************/
                    string numsuivi = accesbdd(nom);
                    Console.WriteLine("numero suvi : " + numsuivi);
                }
            }
            /********************************methode access bdd avec requete en fonction du nom*****************/
            private static string accesbdd(string nom)
            {
                try
                {
                    OdbcConnection bdd = new OdbcConnection("Driver={HyperFileSQL};REP=C:\\GLS\\winexpe6\\DAT\\bddHF\\");
                    bdd.Open();
                    string req = "SELECT SHIPMENT.GLSTRACKID FROM SHIPMENT WHERE SHIPMENT.NAME='" + nom + "'";
                    OdbcCommand sql = new OdbcCommand(req, bdd);
                    OdbcDataReader donnees = sql.ExecuteReader();
                    Console.WriteLine(req);
                    string num = "";
                    while (donnees.Read())
                    {
                        string numsuivi = donnees.GetString(0);
                        num = numsuivi;
                    }
                    donnees.Close();
                    bdd.Close();
                    return num;
                }
                catch (OdbcException eExcpt)
                {
                    Console.WriteLine("Source = " + eExcpt.Source);
                    Console.WriteLine("Message = " + eExcpt.Message);
                    return "Message =" + eExcpt.Message;
                }
            }
        }
    }

Discussions similaires

  1. [MySQL] comprend pas pourquoi erreur
    Par nebil dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/07/2010, 00h05
  2. Réponses: 6
    Dernier message: 17/05/2010, 11h50
  3. Je ne comprends pas pourquoi cette erreur
    Par amine_en_france dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/06/2007, 22h09
  4. Comprends pas pourquoi ca marche pas
    Par cellimo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2005, 22h10
  5. error LNK 2019... comprends pas pourquoi ?
    Par MonsieurAk dans le forum MFC
    Réponses: 2
    Dernier message: 29/04/2005, 15h06

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