Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1536 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  fichier sur lecteur reseau ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fichier sur lecteur reseau ?

n°1771096
cokate
Posté le 08-08-2008 à 11:36:03  profilanswer
 

Bonjour a tous !
Alors je vous explique ... :pt1cable:  
j'ai un fichier Excel qui est sur le disque T:\ partagé par plusieurs postes et en fait ce fichier est actualisé en temps réel grâce a une application qui se trouve sur un poste distant du mien. Je ne peux pas me connecter a cette application directement de mon poste. J'ai besoin de récupérer les données de ce fichier le plus souvent possible pour les mettre dans un data set (en ouvrant une OleDbConnection etc ...)
Je voudrais savoir si vous avez une idée ? pour que je puisse quand je fais la connexion ça prenne les valeurs actuelles ?
(je suppose que le fichier sur l'ordinateur distant doit être ouvert ?? )
 
sinon faire une copie en local ?? (mais j'ai deja essayé avec File.copy ça ne fonctionne pas... )
 
Merci d'avance pour votre aide !!!

mood
Publicité
Posté le 08-08-2008 à 11:36:03  profilanswer
 

n°1771479
moi23372
Posté le 09-08-2008 à 11:37:29  profilanswer
 

rien ne t'empeche de simplement l'ouvrir. De toute façon, si une autre applic la ouvert en Read/Write, tu ne pourras que l'ouvrir en Read.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
n°1772316
cokate
Posté le 12-08-2008 à 10:04:42  profilanswer
 

oui non en gros c'est parce que le fichier excel n'est pas régulièrement sauvegardé bien qu'il change ... du coup j'aimerai exécuter du code vba en C# (le code vba me permettrait de copier le contenu de la feuille excel dans une autre par valeur (avec un spécial paste) quelqu'un sait comment exécuter du vba en C# ??

n°1772744
m3z
il faut toujours faire simple
Posté le 13-08-2008 à 08:58:09  profilanswer
 

vba en C# ???? tu veux dire vba .net ? Ouaip => regarde ca http://safari.oreilly.com/05960076 [...] -PREFACE-1
 
Pourquoi ne forces-tu pas l'ecriture ? tu crées juste un timer dans la feuille qui force l'enregistrement du fichier voir l'ecriture d'un fichier dédié à ton appli.  
 
Par ailleurs, tu peux accéder à la feuiile excel en ADO. Net avec OleDb  
 
 

n°1772798
cokate
Posté le 13-08-2008 à 11:00:52  profilanswer
 

Pour ce qui est de l'écriture ben le truc c'est qu'il faut le faire genre de 5 a 10 fois par seconde ... ce qui est lourd du coup ...
En plus même en faisant ça (avec un timer) des fois ça pose des problèmes car je me connecte au fichier excel (via OleDb en C#) en même temps qu'il est sauvegardé du coup la connexion ne peut plus accéder au fichier ou inversement la macro ne peut pas l'enregistrer ... j du coup pour synchroniser je me suis dit que je lancerais la macro depuis le code C# comme ça avant chaque consultation du fichier Excel on exécute la macro ... mais je sais pas si c'est la meilleure solution ?  
je suis allée voir sur le lien que tu m'as donné mais il faut acheter le livre d'après ce que j'ai compris ? (c'est tout en anglais xD)
mais j'ai quand même peur que ce soit très lent parce que l'appli est censée "monitorer" des valeurs en temps réel ...
si quelqu'un a une idée lumineuse je suis preneuse lol

n°1774998
m3z
il faut toujours faire simple
Posté le 20-08-2008 à 15:28:35  profilanswer
 

Hello
 
Si tu cherches des temps de réponses de l'ordre de 100 ms avec en plus des connections réseaux c'est clair que c'est mal parti.
Tu peux regler tes problèmes de synchro en faisant un fichier temporaire:
par ex :  
Le fichier principale s'appel F.xls (j'ai plein d'imagination moi ;))
Il contient une macro qui se lance toutes les 100 ms.
La macro test si le fichier F1.csv existe
   Si non elle écrit le contenu de F.xls dans F1.csv.tmp(au format cvs c'est + leger) puis renomme le fichier en F1.csv
   Si oui elle elle ne fait rien.
 
De l'autre coté l'appli test si F1.csv existe
   Si oui elle lit le fichier F1.csv, fait son job, puis l'efface. Si ton traitement dure tu as interet à stocker les variables en mémoire, effacer le fichier puis de faire le traitement pour accélérer la vitesse de rafraichissement.
   Si non elle attend ( ~ 50 ms)
 
La synchro est assuré par l'utilisation du renommage de csv.tmp en .csv dans un sens en le delete dans l'autre  
Cela suppose que tu mets moins de 100 ms pour ecrire le fichier F1.csv.tmp et le renommer. Dans le cas contraire tu dois augmenter le temps du timer jusqu'a dépasser le temps d'ecriture du fichier (prend de la marge. Perso je prendrais 100 %)  
 
A tester.  
 
Voilou  
 
A+


Message édité par m3z le 20-08-2008 à 17:46:02
n°1778201
cokate
Posté le 27-08-2008 à 11:59:30  profilanswer
 

cc !
 
d'abord merci beaucoup pour ta réponse !
alors je voudrais bien mettre en place la solution que tu m'a conseillée ... cependant je ne vois pas comment en VBA exécuter une macro toutes les 100 (voire 50 ms) puisque je crois que les fonctions Ontime ou même timevalue et timeserial ont une précision de 1sec ? as tu une solution ? créer une API ? (si c'est le cas je sens que je vais galérer... lol)
sinon la j'ai essayé avec 1 sec et depuis mon programme C # je fais une boucle while tant que j'ai pas lu le fichier excel (et du coup ca ralentit toute l'application) ce serait quand même plus simple d'enregistrer le fichier Excel (ouvert) depuis C# non ? est ce possible ??  
merci d'avance pour votre aide !  

n°1779653
m3z
il faut toujours faire simple
Posté le 29-08-2008 à 10:44:24  profilanswer
 

Hello,  

cokate a écrit :

cc !
cependant je ne vois pas comment en VBA exécuter une macro toutes les 100 (voire 50 ms) puisque je crois que les fonctions Ontime ou même timevalue et timeserial ont une précision de 1sec ? as tu une solution ?  


 
Oui, utilise un timer system.  
Voici un site ou tu peux trouver les infos dont tu auras besoin pour l'implementation.  
Le principe c'est d'utiliser un timer à ~ 50 ms pour venir "pooler". Dans Exel tu lances un timer dès l'ouverture du fichier xls.  
Dans ton appli c'est le même truc. Tu lances un timer qui va venir tester l'état du fichier .csv.  
Ta boucle principale attend juste l'evenement de fin de programme. Tout se passe dans les fonctions appelé par les timers.
 

cokate a écrit :


sinon la j'ai essayé avec 1 sec et depuis mon programme C # je fais une boucle while tant que j'ai pas lu le fichier excel (et du coup ca ralentit toute l'application)  


Le modèle que je te propose est Asynchrone et tu codes du synchrone semble-t-il.
Ouaip ton appli gaspille son temps a attendre alors qu'il faut renvoyer la main au systeme. (c'est la fonction timer qui s'occupe de faire le boulot).
 

cokate a écrit :


ce serait quand même plus simple d'enregistrer le fichier Excel (ouvert) depuis C# non ? est ce possible ??  

.
A premiere vue bien sûr mais le problème c'est que toute ta chaine de traitement devient dépendante.  
Goutte au timer tu verras c'est simple aussi.
 
ps : tu peux lancer un autre timer pour la mise à jour des résultats à l'écran. Dans ce cas prevoit un flag de synchro (multi-thread) pour que cela se passe bien.
 
A+


Message édité par m3z le 29-08-2008 à 11:15:53

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  fichier sur lecteur reseau ?

 

Sujets relatifs
Connaître le nombre de lignes dans un fichier[VBA] chemin disque réseau
[résolu]lecture d'un fichier créé [JSP/JAVA]upload et download d'un fichier
Java lenteur ouverture fichier Excellecture fichier de données séparés par des tabulations
Ouverture d'un fichier en mode ajoutSQL vs Fichier
Uploader fichier lecteur réseauouvrir un fichier sur un lecteur réseau en php
Plus de sujets relatifs à : fichier sur lecteur reseau ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR