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 :

Chargement de fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut Chargement de fichier
    Bonjour,


    Je dois charger un fichier situé sur le serveur, mais lors de l'ouverture du fichier avec la ligne ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne 154: StreamReader sr = new StreamReader(new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read));
    Une monstrueuse ecxeption est lancée. j'ai décommenté le try/catch afin d'avoir + d'info.
    Exception non gérée*: System.IO.FileNotFoundException: Impossible de trouver le fichier 'D:\datagw\DEF\MODBUS\10110000_MODBUS_SIRS485TCT.in'.
    Nom du fichier*: 'D:\datagw\DEF\MODBUS\10110000_MODBUS_SIRS485TCT.in'
    à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    à System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, BooleanbFromProxy)
    à System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
    à DataCenter.Threads.Parser.ParseModbusDef(String filepath, Equipement& equip) dans C:\03 - Technique\02 - dev\01 - soft\Current\DataCenter\DataCenter\Threads\Parser.cs:ligne 154
    à DataCenter.Threads.Parser.<>c__DisplayClass1.<ParseDaq>b__0() dans C:\03 -Technique\02 - dev\01 - soft\Current\DataCenter\DataCenter\Threads\Parser.cs:ligne 97
    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    à System.Threading.ThreadHelper.ThreadStart()
    Plusieurs Thread s'exécute en même temps et accède a ce même fichier

    A titre d'info ce code est dans un boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Ligne 97: ThreadStart starter = delegate { ParseModbusDef(defpath, ref equip); };
    Ligne 98: Thread thModbus = new Thread(starter);
    Ligne 99: thModbus.Start();

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    D:\datagw\DEF\MODBUS\10110000_MODBUS_SIRS485TCT.in est le chemin en local, et toi tu parles d'un serveur, donc d'un disque distant. Il faudrait le partager et y accéder comme suit je présume : "\\Serveur\Partage-DEF\MODBUS\10110000_MODBUS_SIRS485TCT.in"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    Bonjour,

    Merci de prendre le temps de répondre.
    Le programme s’exécute le sur la même machine et le chemin absolu du fichier renseigné est le bon. Les droits que l'application utilise sont les bon également. Ce bug vient de se produire aujourd’hui...

    Ce fichier peut être accéder par Ftp (FilleZilla) Mois je ne vois pas en quoi cela pourrait interférer vu que la demande d'ouverture est faite pour une lecture.

    Merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    et un File.Exists avant la création du stream renvoie quoi ?
    Peut-on avoir l'initialisation de la variable filepath ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    Un File.Exists retourne True sur tout les champs.


    En fait je parcours un répertoire

    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
     
    //...
    filesConfigPath = _config["root"].ToString() + _config["configuration"].ToString();
    if (Directory.Exists(filesConfigPath))
    {
      try 
      {
         Parser p = new Parser();
         DirectoryInfo di = new DirectoryInfo(filesConfigPath);
         foreach(FileInfo fi in di.GetFiles("*.ini"))
         {
              //... 
              starter = delegate { p.ParseMod(fi.FullName, ref dev); };
              new Thread(starter).Start();
             //...
         }
         catch (UnauthorizedAccessException e){
            Core.Log.WriteLog(String.Format("\tTHFL ({1}): Exception : {0}", e.Message, Thread.CurrentThread.ManagedThreadId));
       }
    }
    //...
    fi.fullname donne le nom d'un fichier obtenu a l'aide de la classe DirectoryInfo

    Le thread démarre et ouvre le fichier puis le parcourt. Ce fichier est de type propriété champ = valeur. Dans la lecture du fichier il y a des champ indexé type 'champ[i]', c'est champs sont connu et lorsque le parseur passe sur un de ces champs plusieurs actions sont réalisées.
    - La valeur du champs est mémorisée puis je construit le chemin absolu grâce à cette valeur (c'est fichier sont toujours au même endroit).
    - Le code suivant s'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ThreadStart starter = delegate { ParseModbusDef(defpath, ref equip); };
    Thread thModbus = new Thread(starter);
    thModbus.Start();
    Et on arrive enfin a la ligne 154 de mon premier post :p

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    Problème résolu.

    Le problème venait d'une erreur dans un autre programme.

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

Discussions similaires

  1. [TClientDataSet] Erreur de chargement du fichier MIDAS.DLL
    Par Manopower dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/08/2016, 14h08
  2. [Tomcat][Servlet] Chargement de fichier
    Par hedgehog dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 28/04/2005, 10h23
  3. Réponses: 8
    Dernier message: 14/04/2005, 19h06
  4. [MFC] sauvegarde et chargement de fichiers
    Par Aradesh dans le forum MFC
    Réponses: 5
    Dernier message: 31/03/2005, 11h21
  5. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08

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