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 :

Fonction FileCopy pour copier des fichiers sur un serveur


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut Fonction FileCopy pour copier des fichiers sur un serveur
    Bonjour,

    Je souhaiterais copier des fichiers à partir de mon application Vb.net sur un serveur de fichier.

    Pour cela j'ai fait quelques petit test. Lorsque je suis connecté au serveur, mon fichier est bien copié sur le serveur. Mais dans le cas où je ne suis pas loggué au serveur, mon prog plante. Logique !



    Je cherche un moyen de pouvoir accéder au serveur en passant les identifiacations (login et mot de passe). J'ai regardé sur la MSDN http://msdn.microsoft.com/FileCopy, mais je n'ai trouvé aucune option par rapport au log.

    mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     FileCopy(_OpenFileDialog.FileName, "\\serveur1\sitaff\UserControlBandeauDevis.vb")
    Auriez vous une idée de comment puis-je me logguer au serveur ?

    En attente de vous lire en retour,

    Cordialement

    2berte

  2. #2
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Peut etre une solution de contournement qui est :
    en cas d'exception sur les acces faire un mappage sur le chemin reseau voulu et de lancé par la suis la copie non ?

    car là je vois pas comment faire autrement

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je crois qu'il y a des classes qui permettent de "le loger"

    chercher impersonation sur google, ca donnera peut etre des pistes
    si tu trouves, merci de poster la solution, je pense que ca peut etre utile à pas mal de monde
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Bonjour,
    Pourquoi n'utilises-tu pas de ftp pour faire du transfert de fichiers ?
    C'est un protocole fait pour ca...
    "La Bretagne, ça vous gagne !!!"

  5. #5
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par dudule Voir le message
    Bonjour,
    Pourquoi n'utilises-tu pas de ftp pour faire du transfert de fichiers ?
    C'est un protocole fait pour ca...
    ftp pour un partage réseau ? (comment on peu faire ça ?)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Points : 192
    Points
    192
    Par défaut
    Oui pourquoi pas ?
    Sinon as tu essayé de lancer la commande "net use" avant de copier/coller ?
    "La Bretagne, ça vous gagne !!!"

  7. #7
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    http://www.experts-exchange.com/Prog..._21642786.html
    http://msdn.microsoft.com/en-us/library/aa385413.aspx

    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
    <StructLayout(LayoutKind.Sequential)> _ 
       <a href="http://javascript:void(0)" target="_blank">Class</a> NETRESOURCE
            Public dwScope As Integer
            Public dwType As Integer
            Public dwDisplayType As Integer
            Public dwUsage As Integer
            Public LocalName As String
            Public RemoteName As String
            Public Comment As String
            Public Provider As String
        End Class 'NETRESOURCE
     
        Public Declare <a href="http://javascript:void(0)" target="_blank">Function</a> WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" ( _
           ByVal netResource As NETRESOURCE, _
           ByVal password As [String], _
           ByVal Username As [String], _ 
           ByVal Flag As Integer _
       ) As Integer
     
        Sub Main()
            Dim myNetResource As New NETRESOURCE
            myNetResource.dwScope = 2 'RESOURCE_GLOBALNET
            myNetResource.dwType = 1 'RESOURCETYPE_DISK
            myNetResource.dwDisplayType = 3 'RESOURCEDISPLAYTYPE_SHARE 
            myNetResource.dwUsage = 1 'RESOURCEUSAGE_CONNECTABLE
            myNetResource.LocalName = "P:"
            myNetResource.RemoteName = "\\sha-dds-01\Products"
            myNetResource.Provider = Nothing
     
            Dim ret As Integer = WNetAddConnection2(myNetResource, Password, UserName, 0)
        End Sub
    C'est la source que j'ai trouvé sur un des lien ci dessus

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Donc je ne sais plus quoi faire... Bien entendu l'utilisateur a un accés au répertoire où je souhaite mettre les fichiers sur le serveur. Le seul problème provient qe s'il n'est pas encore connecté sur le serveur...

    Quel procédé doit-je faire ? utiliser de l'impersonation, du ftp ...

    Je n'y connais strictement rien en réseau... Ai-je besoin des sockets ?

    Comment ça fonctionne ?

    Merci de m'aider.

    En attente de vous lire en retour,

    2berte

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le ftp semble etre une solution plutot facile à implémenter
    il faut installer le service ftp sur ton serveur (meme sur un windows xp c'est faisable)

    ensuite il y a des classes vers system.net qui permettent l'utilisation du ftp
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Pour répondre à Troxsa, j'ai implémenter ta solution. Mais malheureusement elle s'avère ineficace.

    Je mets malgré tout mon code :
    ma classe NetRessource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class NetRessource
      Public dwScope As Integer
      Public dwType As Integer
      Public dwDisplayType As Integer
      Public dwUsage As Integer
      Public LocalName As String
      Public RemoteName As String
      Public Comment As String
      Public Provider As String
    End Class
    Et le code qui s'execute avec :
    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
    Public Class Form1
      Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" ( ByVal netResource As NetRessource, ByVal password As String, ByVal Username As String, ByVal Flag As Integer) As Integer
     
      Private Sub _buttonParcourir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _buttonParcourir.Click
     
        'ouvre la boite de dialogue
        _OpenFileDialog.ShowDialog()
     
        Dim myNetResource As New NetRessource
        myNetResource.dwScope = 2 'RESOURCE_GLOBALNET
        myNetResource.dwType = 1 'RESOURCETYPE_DISK
        myNetResource.dwDisplayType = 3 'RESOURCEDISPLAYTYPE_SHARE 
        myNetResource.dwUsage = 1 'RESOURCEUSAGE_CONNECTABLE
        'myNetResource.LocalName = "P:"
        myNetResource.RemoteName = "\\serveur1\Sitaff"
        myNetResource.Provider = Nothing
     
        Dim ret As Integer = WNetAddConnection2(myNetResource, "stagiaire1", "", 0)
     
        ' copie le fichier
        FileCopy(_OpenFileDialog.FileName, "\\serveur1\sitaff\UserControlBandeauDevis.vb")
     
      End Sub
    End Class
    Donc cela me donne exactement la même erreur...


    Par contre je vais regarder du coté du ftp.

    Cordialement

    2berte

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Donc je suis entrain d'essayé avec la méthode ftp. J'ai créé un serveur ftp sur mon serveur. Celui fonctionne très bien, puisqu'avec FileZilla j'ai réussi à mettre des fichiers et en supprimer.

    Les caractéristiques de mon serveur :
    Adresse : 192.0.0.50
    Port : 21
    Identifiant : ""
    pwd : ""

    J'utilise ces lignes de codes pour copier mon fichier sur le FTP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        'ouvre la boite de dialogue
        _OpenFileDialog.ShowDialog()
     
        'copie sur le serveur ftp
        My.Computer.Network.UploadFile(_OpenFileDialog.FileName, "ftp://192.0.0.50", "", "")
    Mais il me génère une Exception :


    J'ai donc essayé avec l'adresse 192.0.0.50. Mais j'ai le même problème. Auriez vous une piste ?

    En attente de vous lire en retour,

    Cordialement

    2berte

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    derrière ftp://192.0.0.50 il faut mettre le nom du fichier de destination (il suffit de faire F1 et c'est expliqué)

    dans system.io.path il y a une fonction qui te donne le nom du fichier à partir du chemin (vu que tu as le chemin d'origine)

    après j'ai pas fait gaffe s'il fallait mettre ftp devant et/ou :21 à la fin
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Je te remercie de ta réponse, mais en faite j'ai résolu ce problème avant de voir la solution.

    Par contre je ne comprends pas tout, je transfère bien mes fichiers via mon appli en vb. Par contre comment se fait-il que je n'ai pas accès au fichiers que j'insére par l'appli en utilisant FileZilla. Je ne les voit même pas . pourtant j'ai les mêmes droits ...

    Désolé, le réseau et moi ça fait 2 !!

    En attente de vous lire en retour,

    Cordialement

    2berte

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Donc c'est bon ça marche. Je ne sais pas ce qu'il s'est passé...

    Donc je met mon code si ça peut intéresser quelqu'un :

    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
        'ouvre la boite de dialogue
        Me._OpenFileDialog.ShowDialog()
     
        Try
     
          'on réccupère le nom du fichier
          Dim mots() As String = Me._OpenFileDialog.FileName.Split("\"c)
     
          'il faudrait vérifier si l'extension est valide, par exmple autoriser seulement des .zip, des .doc , des .pdf, etc ...
     
          'myName = JJMMAAAAHHmmSS_NomDeMonFichier.Extension
          Dim myName As String
          myName = Now.Day.ToString & Now.Month.ToString & Now.Year.ToString & Now.Hour.ToString & Now.Minute.ToString & Now.Second.ToString & "_" & mots(mots.Length - 1)
     
          'il faudrait vérifier dans un premier temps si le fichier n'existe pas avant de le copier
     
     
          'On copie sur le serveur le fichier
          My.Computer.Network.UploadFile(Me._OpenFileDialog.FileName, "ftp://192.0.0.50/" & myName, "user", "pwd")
     
        Catch ex As Exception
          MsgBox(ex.Message)
        End Try
    J'ai essayé de récuppérer mon fichier sur le serveur, cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        My.Computer.Network.DownloadFile("ftp://192.0.0.50/" & myName, "D:\" & myName)
    Mais ce qui me parait le plus étrange, c'est que je n'ai pas besoin de mon de passe pour que ça fonctionne. Est-ce normal ?

    Sinon dernière petite question avant la fin du post. Est-ce possible d'ouvrir directement le fichier sur le poste du client sans le télécharger. En gros l'ouvrir en lecture seul ...

    En attente de vous lire en retour,

    Cordialement

    2berte

  15. #15
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Donc j'avance un petit peu :

    J'ai trouvé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim Processus As New System.Diagnostics.Process()
    'Me._listBoxFichier.SelectedItem().ToString contient le nom du ficier à ouvrir
    Processus.StartInfo.FileName = Me._listBoxFichier.SelectedItem().ToString
    Processus.Start()
    Le problème de ce code, c'est qu'il m'ouvre toujours un nouvel onglet d'IE. Moi ce que je voudrais, c'est qu'il m'ouvre l'application par défaut pour chauqe type de fichier. Par exemple si c'est un fichier ".doc", l'appli m'ouvre word, un fichier ".pdf" l'appli m'ouvre adobe reader, etc ...

    Autre remarque, si je suis connecté au serveur (que je me suis authentifié par l'explorateur), cela fonctionne très bien !

    En attente de vous lire en retour,

    Cordialement

    2berte

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si tu demandes d'ouvrir un lien ftp ou http c'est ie qui s'ouvre
    si tu veux ouvrir le fichier directement, il faut passer par un lien réseau "\\ip\fichier"

    si ton répertoire ftp est accessible aussi en partage c'est faisable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Bonjour

    le truc c'est d'appeler la methode Argument de ton process et d'appeler le programme pour chaque extension
    exemple a la va vite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Processus.StartInfo.FileName = "chemin d'Adobe.exe"
    Processus.StartInfo.argument =  Me._listBoxFichier.SelectedItem().ToString
    Processus.Start

  18. #18
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    J'ai compris ce que tu disais Sperot51. Maitenant que tu le dis ça parait très logique .
    Puis de toute manière je ne veux pas que le répertoire de mon FTP soit accessible via lecteur réseau...

    Par contre pour ta proposition Troxsa, je ne pense pas qu'elle soit envisageable. En fait mon application est destinée à plusieurs utilisateurs. Je ne sais pas où l'utilisateur A va avoir installé Adobe Reader, de plus l'utilisateur B ne va peut-être même pas l'avoir installé au même endroit...
    Es-tu d'accord avec moi, où c'est moi qui est mal compris ta solution.

    Par contre, comment se fait-il qu'au niveau du ftp lorsque je passe par IE pour avoir le fichier, que je n'ai aucun mot de passe demandé.

    Voici ma config sécurité au niveau du FTP :



    Merci de votre aide,

    Cordialement

    2berte

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un paramètre du serveur ftp "autoriser les connexions anonymes"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  20. #20
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 60
    Points : 41
    Points
    41
    Par défaut
    Ok, j'ai compris....

    Savez vous pourquoi lorsque je veux ouvri des pdf. Cela ne se fait pas correctement. En faite j'ai une fenêtre Adobe Reader qui s'ouvre, et rien dedans, et j'ai également rien d'afficher dans mon navigateur. Cf Image ci dessous :



    Mais cela est vraiment aléatoire, parfois ça fonctionne et parfois ça ne fonctionne pas ...

    En attente de vous lire en retour,

    Cordialement

    2berte

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

Discussions similaires

  1. Copier des fichiers sur une clé USB, problème pour le chemin.
    Par monsieurY dans le forum Scripts/Batch
    Réponses: 21
    Dernier message: 21/01/2010, 09h56
  2. un conseil pour exporter des fichier sur un serveur ftp
    Par pierrot67 dans le forum Delphi
    Réponses: 1
    Dernier message: 03/12/2006, 11h15
  3. Réponses: 10
    Dernier message: 03/07/2006, 11h32
  4. Réponses: 2
    Dernier message: 19/12/2005, 20h11
  5. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 07h55

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