none
Problème de compréhension sur fichier WriteLine ? RRS feed

  • Question

  • Bonjour,

    Je n'arrive pas à compendre ce code "la partie fichier seulement", et je voudrais le modifier (suite après) :

    Option Explicit On
    
    Public Class Form1
     Dim lien As String = "ftp://hd1.freebox.fr/Disque dur/Enregistrements/"
     Dim lienFichier As String = "ftp://hd1.freebox.fr/Disque dur/Enregistrements/BasLesCoeurs.ts"
    
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim serverUri As New Uri(lienFichier)
      If serverUri.Scheme <> Uri.UriSchemeFtp Then
       MsgBox("erreur")
      End If
      Dim request As New System.Net.WebClient()
      Try
       Dim newFileData As Byte() = request.DownloadData(serverUri.ToString())
       Dim fileString As String = System.Text.Encoding.UTF8.GetString(newFileData)
       Console.WriteLine(fileString)
      Catch er1 As System.Net.WebException
       MsgBox(er1.ToString())
      End Try
      MsgBox("fin")
     End Sub
    

    Ce code plante, peut être parce que je n'ai pas créé une application console, mais peu importe pour l'instant mon problème est sur le fichier ; alors ce code :

    Dim newFileData As Byte() = request.DownloadData(serverUri.ToString())   
    
    Dim fileString As String = System.Text.Encoding.UTF8.GetString(newFileData)   
    
    Console.WriteLine(fileString)
    

    Pouvez-vous me le modifier pour que j'ai :

    - Un fichier nommé "fichierTV.ts"

    - Qui écrive sur My.Application.Info.DirectoryPath (rep bin en mode debug)

    - Le reste inchangé, car actuellement, je ne sais pas ce que ça fait ni où ça écrit...


    Merci, cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 16 juin 2011 09:58

Réponses

Toutes les réponses

  • Bonjour Joseph,

    Pour ce qui concerne la console.writeLine pour voir le resultat en mode WinForm il faudra aller dans affichage et rechercher "sortie", en mode debug tout s'affichera dedans

    Pour ce qui concerne le code : ça plante sur cette ligne request.DownloadData(serverUri.ToString()) ?
    quel est le message d'erreur, le fichier existe sur le serveur ?

    A bientot

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 16 juin 2011 10:23
    Auteur de réponse
  • Bonjour,

    Modifier LienFichier pour pointer vers le bon fichier. Actuellement cela affiche effectivement le contenu du fichier sur la console d'une application console.

    Voir éventuellement http://msdn.microsoft.com/fr-fr/library/ack30t8y(v=vs.90).aspx qui permet directement de récupérer un fichier et de le copier localement en passant simplement en paramètre les deux emplacements voulus (et comme indiqué par Xavier en cas de plantage merci de toujours indiquer l'erreur exacte, par exemple le nom du fichier sur le serveur web peut-être sensible à la casse).

    Ecrire dans DirectoryPath n'est sans doute pas conseillée (un utilisateur non admin n'est pas censé écrire là où est stocké l'application, généralement les applications utilisant plutôt un répertoire de données séparées soit commun à tous les utilisateurs soit spécifique à chaque utilisateur. Voir http://msdn.microsoft.com/fr-fr/library/system.environment.getfolderpath.aspx pour demander au système l'emplacement d'un dossier).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 16 juin 2011 10:46
    Modérateur
  • Bonjour Xavier, merci...

       

    Dim lienFichier As String = ftp://hd1.freebox.fr/Disque dur/Enregistrements/BasLesCoeurs.ts
    
    Dim newFileData As Byte() = request.DownloadData(serverUri.ToString())  
    
    Dim fileString As String = System.Text.Encoding.UTF8.GetString(newFileData)  
    
    Console.WriteLine(fileString)
    
    
    


    En fait je dis "ça plante", ça ne plante peut être pas ? L'application ne répond plus, mais ne dit pas "ne répond plus", car un fichier TS c'est souvent gros (viéo, émission TV d'1h30, film), alors ça charge en une vingtaine de minutes avec un débit d'1 mo/s, Free peut aller à 2 Mo/s, mais parfois il ne fait que 100 ko/s (ce qui mettra plus d'une heure)... ah ... et comme je n'ai pas de visu, je ne sais même ps à combien ça chargen et si encore ça charge, donc il est possible que j'arrête l'appli avant qu'elle n'ait terminé son boulot ?

    Tu me dis que "tout" s'affichera en moe debug, quoi "tout", normalement en fin on aura juste un nom du fichier .ts, c'est tout, c'est le cas de le dire, mais avant qu'il ne soit totalement chargé, aura-on quelque chose, pas certain, ah ah ... souvent le nom du fichier s'écrit puis ça charge, mais en mode console je ne sais pas.

    Pour le moment, vois le code, je n'arrive même pas à déterminer quel sera le nom du fichier, j'ai l'impression qu'il va donner le nom du lien au fichier, alors je ne peux même pas espérer faire une recherche sur mon disque sans savoir quoi chercher...

    En fait je voudrais écrire sur mon disque et donner un nom au fichier qui sera écrit, sais-tu comment faire ?



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 16 juin 2011 12:26
  • Bonjour Patrice,

     

    Ça ne marche pas, rien ne se passe !

     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Try
       Dim sourceFichier As String = "ftp://hd1.freebox.fr/Disque dur/Enregistrements/BasLesCoeurs.ts"
       Dim i As Integer = InStrRev(sourceFichier, "/")
       Dim nomFichier As String = Mid(sourceFichier, i + 1, Len(sourceFichier) - i)
       Dim cibleFichier As String = "C:\Documents and Settings\All Users\Documents\" & nomFichier
       My.Computer.Network.DownloadFile(sourceFichier, cibleFichier, "", "", True, 500, True)
       'My.Computer.Network.DownloadFile(sourceFile, cibleFile, user, pass, progressBar, pause, écriture)
      Catch ex As Exception
      End Try
    End Sub
    

    J'ai essayé sous la forme :

    My.Computer.Network.DownloadFile(sourceFichier, cibleFichier, "USER", "PASS", True, 500, True)
    
    

    Mais ça ne marche pas mieux, la boîte de défilement s'ouvre et c'est tout ! Tandis que si avec le WebBrowser je charge manuellement (copier/coller), ça marche ?

    Merci, cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 16 juin 2011 13:45
  • Ne jamais utiliser une clause catch vide ce qui masque les erreurs qui pourraient survenir... J'essaierai éventuellement tout à l'heure avec un site FTP public.<del> Si il n'y a pas de mot de passe pour accéder au site, utiliser la version sans identifiant/mot de passe (je pense que là il essaie de fournir un identifiant/mot de passe vide ce qui n'est sans doute pas valide).</del>

    Un essai semble ok. Qq chose comme :

      Const Source As String = "ftp://pdsimage2.wr.usgs.gov/pub/pigpen/moon/clementine/UVVIS_ULCN2005_Basemap_v2/mosaic_256ppd/UVVIS_Clementine_Basemap_v2_ly.jp2"
    
      Dim Desktop As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    
      Const Destination As String = "Test.tmp"
    
      My.Computer.Network.DownloadFile(Source, IO.Path.Combine(Desktop, Destination), "", "", True, 100000, True)
    
    


    La barre de progression avance doucement (et n'est pas visible au début) mais cela a l'air d'avancer... Eventuellement un autre fichier moins volumineux sur le même site devrait sans doute fonctionner sans souci.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 16 juin 2011 15:38
    Modérateur
  • Partice,

    Je peux te passer le user+mdp, mais par mail, car depuis le Net ça tourne...

    Donc, comme tu n'as pas laissé ici de contact, veux-tu me contacter que je t'envoie le nécessaire.

    Merci, cordialement ;o)

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    jeudi 16 juin 2011 15:53
  • Apparemment le site ne semble pas répondre de toute façon si j'essaie dans mon navigateur ?

    http://www.wftpserver.com/onlinedemo.htm semble proposer un serveur ftp de démo sur lequel il doit être possible de faire un essai.

    Eventuellement essayer 100000 au lieu de 500 (c'est en millisecondes, et la doc indique 100 secondes par défaut, donc le timeout pourrait être un peu court !!?). Il n'y a pas de message d'erreur quand on enlève le try/catch ?

    Je confirme que le serveur de démo fonctionne :

      Const Source As String = "ftp://demo.wftpserver.com/upload_demo/test.zip"
    
      Dim Desktop As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    
      Const Destination As String = "Test.tmp"
    
      My.Computer.Network.DownloadFile(Source, IO.Path.Combine(Desktop, Destination), "demo-user", "demo-user", True, 100000, True, FileIO.UICancelOption.DoNothing)
    
    


    Et je récupère bien le fichier (j'ai ajouté UICancelOption.DoNothing car le comportement par défaut est de générer une exception lorsque l'utilisateur clique sur le bouton annuler mais cela n'a rien à voir avec le souci qui nous occupe, à mon avis c'est très certainement le timeout qui est trop court ?)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    jeudi 16 juin 2011 16:46
    Modérateur
  • Patrice,

    Mais je l'ai testé par Internet, il marche si tu entre

    ftp://USER:PASSORD@hd1.freebox.fr

    Je l'ai aussi testé avec un webBroser, il marche (sans user+mdp), mon pc doit les avoir ou il n'en a pas besoin depuis mon pc ?

    Par contre tu ne peux pas tester si tu n'as pas l'user et le passWord, et comme tu ne m'indiques pas où te les envoyer comme je le demandais, j'ai bien compris ce que tu voulais dire, admettons que pour toi ce soit résolu !

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire

    • Modifié EhJoe jeudi 16 juin 2011 17:52 rajout 1
    jeudi 16 juin 2011 17:44
  • Bonjour,

    Donc éventuellement XXX mais je ne sais pas si je peux y accéder (je m'attendais à avoir un message de refus, apparemment je n'ai pas de réponse, peut-être un problème de firewall ?).

    Sinon :

    - est ce que cela marche sur le site demo.wftpserver.com ? (ce qui te permettrait déjà de voir si le principe est bon)
    - que donne un fichier de 10 ou 20 Ko sur le site freebox ? (ce qui te permettrait de voir si le problème est lié au site freebox où à ce fichier ts en particulier peut-être à cause de sa taille)

    Egalement tu n'as pas dit ce que tu constates. Il n'y a pas de message mais ça mouline ? (ce qui me ferais effectivement penser à un problème lié à la taille du fichier).

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 17 juin 2011 09:32
    Modérateur
  • Bonjour Patrice,

    Ben ça marche, mais ce qui ne fonctionne pas c'est la barre de progression, toutefois la fenêtre s'efface quand le téléchargemnt est terminé.

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse EhJoe vendredi 17 juin 2011 18:33
    vendredi 17 juin 2011 18:33