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

Langage Delphi Discussion :

Copier vers un lecteur réseau


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut Copier vers un lecteur réseau
    Bonjour,

    Je veux copier un fichier vers un lecteur réseau. J'ai trouver cette fonction ici
    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
    32
    33
    34
    35
    36
    37
    38
    Function ConnecteLecteurReseauTest(Lecteur,Chemin,MotPasse:String):Boolean;
    Var LocalNameAZT   :Array[0..79]Of Char;
        RemoteNameAZT  :Array[0..80]Of Char;
        Longueur       :Cardinal;
        Retour         :Integer;
    Begin
      // Recherche du chemin existant si existant
      Longueur:=80;
      Retour:=WNetGetConnection(StrPCopy(LocalNameAZT,Lecteur),RemoteNameAZT,Longueur);
      If Retour=NO_ERROR
      Then Begin // Lecteur déjà défini
        If UpperCase(StrPas(RemoteNameAZT))=UpperCase(Chemin)
        Then Begin  // Lecteur déjà existant
          Result:=True;
        End
        Else Begin  // Lecteur exitant mais chemin incorrect
          Retour:=WNetCancelConnection2(StrPCopy(LocalNameAZT,Lecteur),CONNECT_UPDATE_PROFILE,False);
          If Retour=NO_ERROR
          Then Begin // Deconnection du précédent lecteur OK => Connection du nouveau
            Result:=ConnecteLecteurReseau(Lecteur,Chemin,MotPasse);
          End
          Else Begin
            AffErreurLecteur(Retour);
            Result:=False;
          End;
        End;
      End
      Else Begin
        If Retour=ERROR_Not_CONNECTED
        Then Begin // Lecteur non connecté => Connection du nouveau
          Result:=ConnecteLecteurReseau(Lecteur,Chemin,MotPasse);
        End
        Else Begin
          AffErreurLecteur(Retour);
          Result:=False;
        End;
      End;
    End;
    Pour copier j'ai cette fonction dans la faq
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function CopyFile(Source, Destination: String ) : boolean;
    var
      fos : TSHFileOpStruct;
    begin
      FillChar(fos, SizeOf(fos),0);
      with fos do
      begin
        wFunc := FO_COPY;
        pFrom := PChar(Source+#0); 
        pTo   := PChar(Destination+#0); 
        fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
      end;
      result := (0 = ShFileOperation(fos));
    end;
    Dans un bouton j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        if CopyFile('c:\dossier1\test.exe', 'ici')then
         ShowMessage('Copie effectuée avec succès') else
         ShowMessage('Copie non effectuée');
    end;
    la fonction ConnecteLecteurReseauTest renvoie boolean. Qu'est ce que je dois mettre dans if CopyFile('c:\dossier1\test.exe', 'ici') ?.
    Merci d'vance.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    tu as defini un lecteur tu met donc le nouveau lecteur

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Salut,

    Si je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        if CopyFile('c:\dossier1\test.exe', 'ConnecteLecteurReseauTest')then
         ShowMessage('Copie effectuée avec succès') else
         ShowMessage('Copie non effectuée');
    end;
    le fichier n'est pas copié.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 696
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 696
    Points : 13 135
    Points
    13 135
    Par défaut
    Gères GetLastError pour avoir plus d'info sur l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        if CopyFile('c:\dossier1\test.exe', ConnecteLecteurReseauTest(...))then
         ShowMessage('Copie effectuée avec succès') else
         ShowMessage(SysErrorMessage(GetLastError));
    end;
    Tu défini aussi un mot de passe mais pas d'utilisateur

  5. #5
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    J'ai utiliser GetLast error. Mais il n'ya pas d'erreur. Ca renvoie toujours 'Copie effectuée avec succès', Alors que rien n'est copié.
    Je ne renseigne pas de mot de passe car je connecte à une ressource partagé sur le réseau. Je renseigne le lecteur par exemple J:, et chémin \\admin\fact.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 696
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 696
    Points : 13 135
    Points
    13 135
    Par défaut
    Désolé, j'ai pas assez bien regardé ton code. C'est le résultat de ShFileOperation qu'il faut contrôler.

    Tu peux aussi passer plus simplement par CopyFile défini dans Windows.pas.

    Un chemin UNC doit être supporté. Inutile de passer par un mapping.
    Ensuite, le fichier de destination doit être défini. Pas uniquement le chemin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        //Windows.pas
        if CopyFile('c:\dossier1\test.exe', '\\admin\Fact\test.exe', TRUE) then
         ...
    end;

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    Citation Envoyé par Andnotor Voir le message
    Gères GetLastError pour avoir plus d'info sur l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        if CopyFile('c:\dossier1\test.exe', ConnecteLecteurReseauTest(...))then
         ShowMessage('Copie effectuée avec succès') else
         ShowMessage(SysErrorMessage(GetLastError));
    end;
    Tu défini aussi un mot de passe mais pas d'utilisateur

    Argh il a pas tout compris effectivement

    j'aurai pluto fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ConnecteLecteurReseauTest('Z',...) Then
     begin
         if CopyFile('c:\dossier1\test.exe','Z:\')then
         ShowMessage('Copie effectuée avec succès') else
         ShowMessage(SysErrorMessage(GetLastError));
    
      end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if CopyFile('c:\dossier1\test.exe', '\\admin\Fact\test.exe', TRUE) then
    il y'a [Erreur] copie.pas(239): Trop de paramètres originaux.
    Si j'enlève le true et j'exécute, il n'ya pas de copie.
    Que veut-tu dire en parlant de windows.pas?

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 696
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 696
    Points : 13 135
    Points
    13 135
    Par défaut
    Bien sûr, tu as 2x le même nom de procédure et le compilateur utilise le dernier trouvé (Copie placé après Windows dans la clause Uses).

    Commentes Copie.pas dans le Uses ou pour essai, écris comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Windows.CopyFile('c:\dossier1\test.exe', '\\admin\Fact\test.exe', TRUE) then
    ...
    Et pour anuapurna qui a tout compris..., que te retourne GetLastError en cas d'échec à la copie ?

  10. #10
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Voilà ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    begin
       if Windows.copyFile('c:\dossier1\test.exe', '\\admin03\fact\test.exe', true) then
           ShowMessage('Copie effectuée avec succès') else
           begin
             ShowMessage(SysErrorMessage(GetLastError));
             ShowMessage('Copie non effectuée');
           end;
         end;
    GestLastError donne : Accès réfusé.

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 696
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 696
    Points : 13 135
    Points
    13 135
    Par défaut
    Donc tu n'as pas les droits en écriture sur ce répertoire .

  12. #12
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    J'ai changé de poste et ca marche, il doit avoir un problème avec le windows 2003 server.
    Merci à vous tous de m'avoir aider.

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

Discussions similaires

  1. CopyFile vers un lecteur réseau
    Par zaki_1982 dans le forum ASP
    Réponses: 3
    Dernier message: 25/05/2011, 11h01
  2. Réponses: 5
    Dernier message: 17/08/2010, 12h37
  3. compilation vers un lecteur réseau
    Par bapfuror dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 02/06/2008, 11h35
  4. Redirection de Mes documents vers un lecteur Réseau
    Par moi95 dans le forum Administration système
    Réponses: 0
    Dernier message: 04/04/2008, 11h45
  5. [exporter] Exporter la base vers lecteur réseau..
    Par terziann dans le forum Administration
    Réponses: 3
    Dernier message: 15/11/2005, 11h02

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