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 :

Problème de disponibilité de fichier


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut Problème de disponibilité de fichier
    Bonjour à tous,

    Afin que tous les utilisateurs d'un programme puissent consulter un état d'avancement qui se trouve sur un fichier .txt, ce fichier a été placé sur un FTP.

    Au démarrage de la session qui concerne ce fichier, une copie de ce fichier est créée sur le "C:\Temp\". Une fois la copie créée, j'appelle la fonction Ecrire qui permet tout simplement d'écrire 1 ligne dans le fichier.

    Mon bug intervient dès que je veux renvoyer le fichier sur le FTP.

    Quant une personne veut consulter un fichier elle va dans la partie adéquat, et clique sur le bouton consultation. Si le compte de session correspond à celui qui veut consulter le fichier cela renvoie le fichier sur le FTP.

    Et c'est là que ça plante. En effet il me signale que le fichier n'est pas disponible car il est utilisé par un autre processus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Sub ecrire(ByVal nomuser As String, ByVal text As String)
     
            Dim path As String = "C:\Temp\" & nomuser & ".txt"
     
            'Ouvre le fichier et écrit ce qui a été fait à la fin du fichier
            Dim sw As StreamWriter = File.AppendText(path)
            sw.WriteLine(text)
            sw.Flush()
            sw.Close()
     
    End Sub
    Je suppose que le problème vient de la fermeture du fichier qui ne se produit pas. Mais à part en fermant le StreamWriter je ne vois pas ce que je peux faire d'autre. J'ai cherché à faire quelque chose du genre File.close(path) mais je ne trouve rien de ce genre.

    Après j'ai un second problème dans le même genre. Toujours pour ce même compte de session. Il lui est fournit un autre .txt par semaine qui contient un résumé des actions à effectuer dans le semaine.
    Le téléchargement du fichier se fait sans problème, d'ailleurs on le retrouve dans le C:\Temp\, mais la lecture ne s'effectue pas et il me retourne le problème suivant : Le fichichier C:\Temp\test.txt ne se trouve pas dans le chemin spécifié, et pourtant il y est bien...

    Si je prends une autre session et que je fais chercher ce fichier alors ça marche sans problème MAIS aucun autre fichier n'a été téléchargé ni modifié contrairement à l'autre session.

    Je supposes que les deux problème sont liés, mais sait-on jamais.

    Si quelqu'un à une idée je suis preneur ^^.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    lu en diagonale, mais un fichier n'est pas vraiment multiutilisateur, encore moins sur un ftp
    une base de données ou un webservice voir meme du socket sont plus adapatés
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    Merci bien pour la réponse !

    Je m'étais douté que cela serait un problème, mais comme une seule personne est à la base de la modification de fichier et que tous les autres sont en lecture seule, je pensais que ça fonctionnerai sans problème.

    J'avais déjà pensé à la BDD et exclu cette solution, car dans un futur très proche il pourra y avoir plus de 25 000 mouvements par jour.

    Pour les Socket, ne les ayant jamais employé, quel serait le principe de leur utilisation ? Je connais leur utilité mais si au moment de l'appel de renseignement si la session qui a effectuée ces modifications n'est pas ouverte, il n'y aura pas de réponse. A moins de passé par un intermédiaire mais lequel ?

    Ou pour les webservices je ne saurai que dire ne les ayant jamais utilisé.

    En tout cas je précise, car ça peut influencer sur le choix, dû moins je crois ^^, que les différents utilisateurs ne sont absolument pas sur le même réseau et que leur seul moyen de communication c'est Internet.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    internet c'est un réseau ! donc les utilisateurs sont sur le même réseau
    et puis si tu y arrives avec de la lecture de fichier sur un dossier partagé, une base de données ou du socket ca ira aussi ...

    une base de données peut supporter des milliers de lectures à la seconde, donc par jour ca lui fera pas peur

    donc s'il te faut une application serveur qui connait la valeur et doit la mettre à jour pour tout le monde, et x applications clientes qui doivent la valeur assez souvent, plusieurs choix possibles :
    (dans tous les cas, le logiciel serveur peut etre un service windows qui se lance automatiquement au démarrage du pc)

    - une base de données sur le serveur, accessible depuis l'extérieur (sql server express est gratuit et est parfaitement multi utilisateur)
    le logiciel serveur va faire un update dès que la valeur a été modifiée, les clients peuvent se connecter toutes les x secondes pour connaitre la valeur

    - socket ou webservice (ca revient au meme)
    - - cas 1 : le serveur est à l'écoute, les clients peuvent se connecter via son adresse ip et un port donné, un client peut alors demander la valeur toutes les x secondes, et le serveur répond la valeur au client qui demande)
    - - cas 2 : le serveur est à l'écoute, quand un client se connecte, le serveur lui donne la valeur, quand la valeur change, il l'envoie à tous les clients connectés à ce moment là

    le cas 2 par socket ou webservice est le plus optimisé, il évite des tas de demande de client si la valeur ne change pas souvent

    les schémas de fonctionnement décris ci dessus sont valables que tu ais une ou plusieurs valeurs à transmettre (pour plusieurs un identifiant de valeur sera utilisé)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    Je te remercie !!

    Je vais rester sur la BDD, vue que les infos doivent être conservée quelques temps ça me semble le plus approprié.

    En tout cas il faudra que j'essaie d'employer les sockets et webservice histoire de voir ce que ça donne.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    dans ce cas une table pour simplifier une table avec les valeurs les plus récentes dans une table, et l'historisation dans une autre

    Valeurs_Actuelles :
    IdValeur
    Valeur

    Valeurs_Histo :
    IdEnregistrement auto incrément
    IdValeur
    Valeur
    Date

    le serveur insert dans les 2 tables avec getdate() (équivalent de now en sql) sur celle d'histo
    et les clients font un select sur la table de valeur actuelle

    si les clients ont besoin de la date de dernière valeur une seule table suffit, et les clients font un select de la ligne ayant la plus grande date (avec un index sur la colonne date)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    Outch !!

    Merci beaucoup !!

    Cette solution est parfaite pour mon utilisation, car une seule personne sera intéressée de voir l'ensemble des modifications, les autres eux uniquement par les nouveautés. Avec cette méthode je n'aurai plus qu'a afficher la première table + les modifications depuis la dernière connexion en cas de non utilisation du soft (soit en gros les congés ^^).

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

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 23h21
  2. problème écriture sur un fichier
    Par drinkmilk dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2007, 01h08
  3. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 11h30
  4. Réponses: 4
    Dernier message: 16/04/2004, 09h20
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 10h41

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