Page 1 sur 1

CopyFile, création du chemin lors de la copie

Publié : mer. 15/déc./2021 10:12
par hub73
Bonjour à vous.
Comment puis-je faire pour que la commande copyfile crée au besoin l'arborescence de la destination lors de la copie ?

Par exemple copyfile ("'\\Diskstation\webradio\radio\prod03.ogg","C:\Users\user\Documents\copie_sonore_cartoucheur\productions\prod03.ogg")

J'ai créé manuellement sous windows l'arborescence C:\Users\user\Documents\copie_sonore_cartoucheur
Mais pas le dossier 'productions'
Ainsi copyfile ne copie pas le fichier dans la destination car le dossier n'existe pas.

Il me faudrait une procédure qui analyse le chemin de destination et crée l'arborescence avant la copie...

Merci de votre aide, je continue à chercher.

Re: CopyFile, création du chemin lors de la copie

Publié : mer. 15/déc./2021 10:28
par hub73
J'ai essayé :

Code : Tout sélectionner

            Dossier$ = GetPathPart (gChemin_local_donnees$ + NomFichier_1$)
            If FileSize (Dossier$) <> -2 ; Dossier
              CreateDirectory (Dossier$)
            EndIf
Mais ce ne semble pas fonctionner pour l'instant.

Code : Tout sélectionner

Procedure Copier_les_fichiers_en_local()
  
  Protected NomFichier$
  
  Protected NomFichier_1$
  Protected NomFichier_2$
  Protected NomFichier_3$
  
  Protected NumFic
  
  Protected i
  Protected j
  
  Protected Ignorer$
  
  Protected Dossier$
  
   Ajouter_au_log ("Copie fichiers locaux début.")
   Afficher_message ("Copie fichiers locaux début.")
   
  ; Cartouches
  
  NomFichier$ = gChemin_fichier_cartoucheur$
  
  If NomFichier$ <> ""
    
    NumFic = ReadFile(#PB_Any, NomFichier$)
    
    If NumFic <> 0
      
      gChemin_fichier_cartoucheur$ = NomFichier$
      
      Ignorer$ =  ReadString(NumFic)
      
      For j=0 To #MAX_BANQUES - 1
        
        Banques(j)\Nom_banque$ = ReadString(NumFic)
        
        For i=0 To #MAX_SLOTS - 1

          NomFichier_1$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          Ignorer$ = ReadString(NumFic)
          
          If NomFichier_1$ <> ""
            Dossier$ = GetPathPart (gChemin_local_donnees$ + NomFichier_1$)
            If FileSize (Dossier$) <> -2 ; Dossier
              CreateDirectory (Dossier$)
            EndIf
            CopyFile (gChemin_general_donnees$ + NomFichier_1$, gChemin_local_donnees$ + NomFichier_1$)
            Ajouter_au_log ("Slot, copie de '" + gChemin_general_donnees$ + NomFichier_1$ + "' vers dossier local '" + gChemin_local_donnees$ + NomFichier_1$ + "'.")
            Afficher_message ("Slot, copie de '" + gChemin_general_donnees$ + NomFichier_1$ + "' vers dossier local '" + gChemin_local_donnees$ + NomFichier_1$ + "'.")
          EndIf    
        Next i
        
      Next j
      
      Ignorer$ =  ReadString(NumFic)
      
      CloseFile(NumFic)
      
    Else
      MessageRequester("Information","Impossible d'ouvrir le fichier cartoucheur!")
    EndIf
    
    
  Else
    Afficher_message ("Pas de cartoucheur chargé.") 
  EndIf  
  
  ; Playliste
  
  NomFichier$ = gChemin_fichier_playliste$ 
  
  If NomFichier$ <> ""
    
     NumFic = ReadFile(#PB_Any, NomFichier$)
     
      If NumFic <> 0
        
        Ignorer$ =  ReadString(NumFic)
        
        For i=0 To 20 - 1
  
          NomFichier_1$ =  ReadString(NumFic)
          NomFichier_2$ =  ReadString(NumFic)
          NomFichier_3$ =  ReadString(NumFic)
          
          
          Ignorer$ =  ReadString(NumFic)
          Ignorer$ =  ReadString(NumFic)
          Ignorer$ =  ReadString(NumFic)
          Ignorer$ =  ReadString(NumFic)
          Ignorer$ =  ReadString(NumFic)
          Ignorer$ =  ReadString(NumFic)
          
          If NomFichier_1$ <> ""
            Dossier$ = GetPathPart (gChemin_local_donnees$ + NomFichier_1$)
            If FileSize (Dossier$) <> -2 ; Dossier
              CreateDirectory (Dossier$)
            EndIf            
            CopyFile (gChemin_general_donnees$ + NomFichier_1$, gChemin_local_donnees$ + NomFichier_1$)
            Ajouter_au_log ("Playliste sonore, copie de '" + NomFichier_1$ + "' vers dossier local")
            Afficher_message ("Playliste sonore, copie de '" + NomFichier_1$ + "' vers dossier local")
          EndIf
          
          If NomFichier_2$ <> ""
            Dossier$ = GetPathPart (gChemin_local_donnees$ + NomFichier_2$)
            If FileSize (Dossier$) <> -2 ; Dossier
              CreateDirectory (Dossier$)
            EndIf                    
            CopyFile (gChemin_general_donnees$ + NomFichier_2$, gChemin_local_donnees$ + NomFichier_2$)
            Ajouter_au_log ("Playliste intro, copie de '" + NomFichier_2$ + "' vers dossier local")
            Afficher_message ("Playliste intro, copie de '" + NomFichier_2$ + "' vers dossier local")
          EndIf
          
          If NomFichier_3$ <> ""
            Dossier$ = GetPathPart (gChemin_local_donnees$ + NomFichier_3$)
            If FileSize (Dossier$) <> -2 ; Dossier
              CreateDirectory (Dossier$)
            EndIf                    
            CopyFile (gChemin_general_donnees$ + NomFichier_3$, gChemin_local_donnees$ + NomFichier_3$)
            Ajouter_au_log ("Playliste outro, copie de '" + NomFichier_3$ + "' vers dossier local")
            Afficher_message ("Playliste outro, copie de '" + NomFichier_3$ + "' vers dossier local")
          EndIf 
          
        Next i
        
      Else
        MessageRequester("Information","Impossible d'ouvrir le fichier playliste !")
      EndIf
    Else
      Afficher_message ("Pas de playliste chargée.")
    EndIf
    
    Ajouter_au_log ("Copie fichiers locaux terminée.")
    Afficher_message ("Copie fichiers locaux terminée.")
    
  EndProcedure


Re: CopyFile, création du chemin lors de la copie

Publié : mer. 15/déc./2021 10:35
par hub73
j'ai remplacé par la fonction createpath que j'ai trouvé sur le forum anglais

http://forums.purebasic.com/english/vie ... =3&t=68073