[Résolu] Obtenir nom de fichier sans le chemin

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Obtenir nom de fichier sans le chemin

Message par Micoute »

Bonjour à tous,

une fois de plus, je viens vers vous pour solliciter votre expérience, j'ai fait une procédure pour charger un fichier et je voudrais qu'il n'y ait que le nom du fichier avec son extension, mais pas le chemin et je ne comprend pas car elle me retourne "" et si je commente la ligne 6, j'ai le chemin + le nom du fichier + l'extension !

Code : Tout sélectionner

Procedure.s ChargerFichier()
  FichierParDefaut$ = "*.*"
  Filtre$ = "Tous les fichiers (*.*)|*.*"
  Filtre  = 0
  Fichier_a_charger$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  Fichier_a_charger$ = GetFilePart(Fichier_a_sauvegarder$)
  ProcedureReturn Fichier_a_charger$
EndProcedure
Je vous remercie d'avance pour votre réponse.
Dernière modification par Micoute le mer. 03/sept./2014 12:50, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Obtenir nom de fichier sans le chemin

Message par GallyHC »

Bonjour,

Voila ton code remis en forme et qui fonctionne :

Code : Tout sélectionner

Procedure.s ChargerFichier()
  ;
  Protected.i iFilter
  Protected.s sDefaultFile, sFilter, sFileName
  
  sDefaultFile  = "*.*"
  sFilter       = "Tous les fichiers (*.*)|*.*"
  iFilter       = 0
  ProcedureReturn GetFilePart(OpenFileRequester("Choisissez un fichier à charger", sDefaultFile, sFilter, iFilter))

EndProcedure

Debug ChargerFichier()
Pourquoi ton code ne fonctionne pas c'est simple tu utilise plein de variables sans les déclarés et donc il arrive des fois que l'on fasse une petite erreur dans le nom de la variable.... Mais dans ton cas c'est juste que le part utilise une variable vide.

Code : Tout sélectionner

  Fichier_a_charger$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  Fichier_a_charger$ = GetFilePart(Fichier_a_sauvegarder$)
"Fichier_a_sauvegarder$" aurait du être "Fichier_a_charger$"

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Obtenir nom de fichier sans le chemin

Message par Micoute »

Bonjour GallyHC,

non, ça ne marche pas, mais j'aurais pu envoyer mon programme entier et tu aurais vu où était mon erreur, mais ta réponse m'a mis sur la voie.

Voici donc le code.

Code : Tout sélectionner

EnableExplicit

UseZipPacker()
#Fichier_a_charger = 1
#Fichier_a_sauvegarder = 2
Global Filtre$, FichierParDefaut$, Filtre.i
Global Fichier_a_sauvegarder$
Global Fichier_a_charger$

Procedure.s ChargerFichier()
  FichierParDefaut$ = "*.*"
  Filtre$ = "Tous les fichiers (*.*)|*.*"
  Filtre  = 0
  Fichier_a_charger$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  ProcedureReturn Fichier_a_charger$
EndProcedure

Procedure.s SauvegarderFichier()
  Filtre$ = "Tous les fichiers (*.*)|*.*"
  Filtre = 0
  Fichier_a_sauvegarder$ = SaveFileRequester("Choisissez un fichier à sauvegarder", FichierParDefaut$, Filtre$, Filtre)
  Fichier_a_sauvegarder$ = GetFilePart(Fichier_a_sauvegarder$, #PB_FileSystem_NoExtension)
  Fichier_a_sauvegarder$ + ".zip"
  ProcedureReturn Fichier_a_sauvegarder$
EndProcedure  

Procedure Fichier_a_compresser(Fichier.s)
  Protected longueur, *IDMemoire
  
  If ReadFile(#Fichier_a_charger, Fichier)
    longueur = Lof(#Fichier_a_charger)
    
    *IDMemoire = AllocateMemory(longueur)
    If *IDMemoire
      ReadData(#Fichier_a_charger, *IDMemoire, longueur)
    EndIf
    CloseFile(#Fichier_a_charger)
    ProcedureReturn *IDMemoire
  EndIf
EndProcedure

ChargerFichier()
SauvegarderFichier()

Define *mem
If CreatePack(#Fichier_a_sauvegarder, Fichier_a_sauvegarder$, #PB_PackerPlugin_Zip)
  *mem = Fichier_a_compresser(Fichier_a_charger$)
  AddPackMemory(#Fichier_a_sauvegarder, *mem, MemorySize(*mem), GetFilePart(Fichier_a_charger$))
  ClosePack(#Fichier_a_sauvegarder)
  FreeMemory(*mem)
EndIf
Merci beaucoup pour ton aide qui m'a été très profitable.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: [Résolu] Obtenir nom de fichier sans le chemin

Message par TazNormand »

Salut Micoute,

Ton programme ne sait pas où sauvegarder ton archive, car quand tu utilises le FileRequester pour la sauvegarde, tu ne gardes que le nom, donc il te faut repréciser le chemin :

Code : Tout sélectionner

EnableExplicit

UseZipPacker()
#Fichier_a_charger = 1
#Fichier_a_sauvegarder = 2
Global Filtre$, FichierParDefaut$, Filtre.i
Global Fichier_a_sauvegarder$
Global Fichier_a_charger$
Global Chemin_a_sauvegarder$    ; Ajout TazNormand
Global Nom_Fichier_a_sauvegarder$     ; Ajout TazNormand

Procedure.s ChargerFichier()
	FichierParDefaut$ = "*.*"
	Filtre$ = "Tous les fichiers (*.*)|*.*"
	Filtre  = 0
	Fichier_a_charger$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
	ProcedureReturn Fichier_a_charger$
EndProcedure

Procedure.s SauvegarderFichier()
	Filtre$ = "Tous les fichiers (*.*)|*.*"
	Filtre = 0
	Fichier_a_sauvegarder$ = SaveFileRequester("Choisissez un fichier à sauvegarder", FichierParDefaut$, Filtre$, Filtre)
	Nom_Fichier_a_sauvegarder$ = GetFilePart(Fichier_a_sauvegarder$, #PB_FileSystem_NoExtension)	
	Chemin_a_sauvegarder$ = GetPathPart(Fichier_a_sauvegarder$)       ; Ajout TazNormand
	Fichier_a_sauvegarder$ = Chemin_a_sauvegarder$+Nom_Fichier_a_sauvegarder$+".zip"       ; Ajout TazNormand
	ProcedureReturn Fichier_a_sauvegarder$
EndProcedure  

Procedure Fichier_a_compresser(Fichier.s)
	Protected longueur, *IDMemoire
	
	If ReadFile(#Fichier_a_charger, Fichier)
		longueur = Lof(#Fichier_a_charger)
		
		*IDMemoire = AllocateMemory(longueur)
		If *IDMemoire
			ReadData(#Fichier_a_charger, *IDMemoire, longueur)
		EndIf
		CloseFile(#Fichier_a_charger)
		ProcedureReturn *IDMemoire
	EndIf
EndProcedure

ChargerFichier()
SauvegarderFichier()

Define *mem
If CreatePack(#Fichier_a_sauvegarder, Fichier_a_sauvegarder$, #PB_PackerPlugin_Zip)
	*mem = Fichier_a_compresser(Fichier_a_charger$)
	AddPackMemory(#Fichier_a_sauvegarder, *mem, MemorySize(*mem), GetFilePart(Fichier_a_charger$))
	ClosePack(#Fichier_a_sauvegarder)
	FreeMemory(*mem)
EndIf

Image
Image
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: [Résolu] Obtenir nom de fichier sans le chemin

Message par GallyHC »

Bonjour,

Dans tout les cas utilise "EnableExplicit" qui t'obligera à déclarer tes variables, sa évite pas mal de problème.

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Obtenir nom de fichier sans le chemin

Message par Micoute »

Merci du conseil, GallyHC, mais j'oublie tout le temps, on ne se refait pas !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre