Page 1 sur 1

Sauvegarde des fichiers

Publié : jeu. 09/déc./2004 7:05
par Chris
J'ai fait cette procédure pour sauvegarder les fichiers.

Quand on utilise la fonction SaveFileRequester(), le fichier est sauvegardé en utilisant le nom, tel qu'il est fourni dans la boîte de dialogue, même si aucune extension n'a été indiquée, ou si elle correspond pas à ce qui a été prévu initialement dans les filtres.


Il faut donc, à chaque fois, créer un code qui fasse les vérifications avant la sauvegarde.
C'est le but de cette procédure.

Explication:
Si plusieurs extensions sont contenues dans le filtre, (ex: *.jpg;*.jpeg;*.bmp) et si vous ne spécifiez pas d'extension dans le titre du fichier, ou si vous mettez une extension qui n'est pas contenue dans le filtre, (ex: .png), le fichier sera sauvegardé avec la première extension trouvée dans le filtre choisi (ex: .jpg)

Si vous mettez une extension qui est contenue dans le filtre, le fichier sera sauvegardé avec l'extension que vous avez entrée.

Si vous choisissez "Tous types (*.*)", vous pouvez sauvegarder le fichier avec l'extension que vous voulez. (Ex: .glop), et si vous ne mettez pas d'extension, le fichier n'en aura pas.

Code : Tout sélectionner

Procedure.s SaveFile(Titre$, Defaut$, Filtre$, Position)
  ;{- Récupération des filtres et des index associés
  Structure SAUVEFICHIERS
    id.w
    Extens.s
  EndStructure
  NewList Extensions.SAUVEFICHIERS()
  
  Num = 0 : I = 1 : J = 2
  
  Repeat
    Typ$ = StringField(Filtre$, I, "|")
    Ext$ = StringField(Filtre$, J, "|")
    
    If Ext$
      If FindString(Ext$, ";", 1)
        Count = CountString(Ext$, ";")
        For k = 0 To Count
          n$ = StringField(Ext$, k + 1, ";")
          AddElement(Extensions())
          Extensions()\id = Num
          Extensions()\Extens = StringField(n$, 2, ".") ;n$
        Next
      Else
        AddElement(Extensions())
        Extensions()\id = Num
        Extensions()\Extens = StringField(Ext$, 2, ".") ;Ext$
      EndIf
    EndIf
    I + 2 : J + 2 : Num + 1
  Until Ext$ = "" Or Typ$ = ""
  ;}-
  
  ;{- Traitement du nom de fichier
  ; Résultat de la boite
  Full_Path$ = SaveFileRequester(Titre$, Defaut$, Filtre$, Position)
  
  If Full_Path$
    ; Vérifie que le chemin ne se termine pas par un point
    If Right(Full_Path$,1) = "."
      Full_Path$  = Left(Full_Path$, Len(Full_Path$)-1)
    EndIf
    
    ; Récupère les données concernant le fichier
    Fic_Chemin$     = GetPathPart(Full_Path$)
    Fic_Extension$  = GetExtensionPart(Full_Path$)
    Fic_Fichier$    = StringField(GetFilePart(Full_Path$),1,".")
    Fic_Index       = SelectedFilePattern()
    
    ; Vérifie que le choix n'est pas "*.*".
    ForEach Extensions()
      If Extensions()\id = Fic_Index And Extensions()\Extens = "*"
        If Fic_Extension$
          ProcedureReturn Fic_Chemin$+Fic_Fichier$+"."+Fic_Extension$
        Else
          ProcedureReturn Fic_Chemin$+Fic_Fichier$
        EndIf
        Break
      EndIf
    Next
    ResetList(Extensions())
    
    ; Si le choix est différent de "*.*"
    ForEach Extensions()
      If Extensions()\id = Fic_Index
        P = ListIndex(Extensions())
        Fic_Def$ = Extensions()\Extens
        Break
      EndIf
    Next
    
    If Fic_Extension$
      SelectElement(Extensions(),P)
      While Extensions()\id = Fic_Index
        If Extensions()\Extens = Fic_Extension$
          Extension$ = Extensions()\Extens
          Break
        Else
          Extension$ = Fic_Def$
        EndIf
        NextElement(Extensions())
      Wend
    Else
      Extension$ = Fic_Def$
    EndIf
    
    NomFichier$ = Fic_Chemin$ + Fic_Fichier$ + "." + Extension$
    ClearList(Extensions())
    ProcedureReturn NomFichier$
  Else
    ClearList(Extensions())
    ProcedureReturn
  EndIf ;}
EndProcedure

;-================== Test de la procédure ==================
T$ = "Sauvegarder le fichier"
D$ = "\..\PureBasic\ParDefaut.txt"
F$ = "Fichiers texte (*.txt)|*.txt|Texte enrichi (*.rtf,rtx,rty,rtz)|*.rtf;*.rtx;*.rty;*.rtz|Format Word (*.doc,*.dog,*.dod)|*.doc;*.dog;*.dod|Tous types (*.*)|*.*"
P = 0

CheminFichier$ = SaveFile(T$,D$,F$,P) ; appel de la procédure
If CheminFichier$
  MessageRequester("Fichier sauvé", "Le fichier a été sauvé dans:"+Chr(10) + CheminFichier$, #MB_ICONINFORMATION)
  If CreateFile(0, CheminFichier$)
    CloseFile(0)
  EndIf
EndIf