| Décodage base64 | |
|
|
|
Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Décodage base64 Ven 24 Aoû 2012 - 11:56 | |
| Bonjour à tous ! Suite au programme de ygeronimi, je me suis amusé à faire un bout de code permettant de décoder un fichier en base64... essayez-le ! - Code:
-
' -------------------------------------------- ' DECODAGE D'UN FICHIER EN BASE 64 ' Auteur : Nardo ' -------------------------------------------- DIM code64$ : code64$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" DIM ligne DIM i,j,k,v DIM Src$,a$,b$ DIM Largeur,Hauteur DIM CRLF$:CRLF$=CHR$(10)+CHR$(13) DATA "Qk3mCAAAAAAAADYEAAAoAAAALgAAABkAAAABAAgAAAAAALAEAAAAAAAAAAAAAAABAAAAAAAAwsLC" DATA "AL2jbgBycnIA9fX1AOnp6QCUlJQAtZplAJlzKQDg4OAA7u7uAPn5+QC8vLwAk2gSANHR0QBWVlYA" DATA "8fHxAM3NzQDW0ckAhYWFAObm5gDr49MAqqqqANXV1QDd3d0A2NjYADMzMwCph0UA9/PtAKqPWwDI" DATA "sYUAsJFTANXEowC1tLEA5dzKAMfHxwBCQkIApoI5AN3QuACvrq0An5+fAO/q4ADy8vIAnYVVAKib" DATA "gQDDq3sAzLePAKuppgCMXQAAxq6AANG+mQDg1L4AnXs5AMvLygDz8u8Aq6acANvNsADPw64ApJJv" DATA "AOPj4wDHvakA7+7rAPHt5ACZfUcA////AAAAAAChGAAAwAAWAABE3ABHyVgAdU8AAGlydgB+AHIA" DATA "Oo4NAAkqfgAgADMAAAAAABsJAgAAAAAAAAAAAAAAAABcOkQAcmVQAFxvcwBuYVAAYXJvAGNpbQBy" DATA "U1wAYlxjAAA0NgBsb2YAcmVkAGliXwBnLmcAAGZpABQAAAAAEvMAAAAAAOrQAAAoABIAfjrCADMJ" DATA "KgAAIAAAAgAAAAAbCQAAAAAAAAEAANkAAAB+OYsAPxCIAOpkfgAYABIAABLrADrCPADB6X4AiH46" DATA "AACdQgAYazAA7tAAAAAAnQAAAAAAAAABAAAAAADoAAAAABLqAAAAAQDvgAAAjwASAH48BAA6wfAA" DATA "//9+AOn//wB+OsEAO+VtAAkqfgAgADMAAAAAABsJAgAAAAAAmAAAAAAS6wA7COYAQoh+ACAAnQAA" DATA "AAAAGwkCAAAAAAABAAAAAAAAAAAAIAAAAAAAkwAAAHyFwQAS6/AAAAQAAPQAAAAAEuwAtXsLAOvw" DATA "WABOABIAfjqXAAAAIAADAAAA+H/+AP///wAAAAAAl04AAER+OgBQXDoAc3JlAFBcbwBvbmEAbWFy" DATA "AFxjaQBjclMANmJcAGZcNABkbG8AX3JlAGdpYgBpZy4AOgBmAAAAfgDEAAAAABLrADqQzgDuIH4A" DATA "AACdAAAAAABFbPsA6/wAAE4AEgAAAAIAAAMIAO9kAAAwABIAAEVjAAAAJAAAAAAATgAAAAAAAgAA" DATA "AwgAAAQAAFAAAAAAcgAAdADqAAAAAAAiAgIAAAACAAAC9QAD2QAAEAAAAAAAAwAAAAAAoRgAAGAA" DATA "FgAAFS8AEuzYAAEgAABEAAAAAADsABUAAADqIAAANQASAHyA0gAS7HwA6QAAAMB8kQB8kgEA////" DATA "AAG7/wBvfJIAfICaABUAAAAACAAAgAAUAHyAmgAAAGYAAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" DATA "AAAAAAIOfAAACAIAVAAAAAAS7AACDlEA9EgCAMAAEgB8g5oAgJqIALoEfAAqAEQAADMJAD8/Pz8/" DATA "Pz8/Pz8/Pz8/Pz8/PygdJAwvLy8kLCE/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/" DATA "Pz8hBgwqKy4VFRUrKgceMj8/Pz8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/PzAMOQsAEA0W" DATA "Fg0iCyY5DAE/Pz8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/AQcgNA0WFhYWFg0NDSILLjMB" DATA "Cj8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8BMwAQFhYNDQ0NEDQiAAAiACY+AT8/Pz8/Pz8/" DATA "Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Px8HNA0WDQ00NCIAAAsLCyYADSImBx0/Pz8/Pz8/Pz8/Pz8AAD8/" DATA "Pz8/Pz8/Pz8/PyQ7FhgNNAAAAAsgBQIOGSMAEBYANgwbPz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/" DATA "HxoXFxgQACcSDiMZDhIVDRkLEBYNCyowPz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/JDgXFwUOGQ4C" DATA "JyIICAgICCMmEBgYEC4MPz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8bDDoIOicCOjo6Ojo6Ojo6Og4n" DATA "NBgXGAAHIT8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz83GgQTEzojCxMTExMTExMTEwISEBgXFzQqLT8/" DATA "Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8xBjwEBAQuAgQEBAQEBAQEBCcCNBc6CA05AT8/Pz8/Pz8/Pz8A" DATA "AD8/Pz8/Pz8/Pz8tAQ8JCQkTIw0JCQQEBAQEBAsODRc6OhgBBj8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/" DATA "Pz8xBikJCQkJBRIPCQkJCQkJCRcZFhcTBBcrAT8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8lGgMPDw8P" DATA "ExkIDw8PDw8PDw8ZEAgEBBccLT8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8bDCkpDw8PDwUSAwMDAwMD" DATA "AwMOIAQJCRczIT8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/JCUDDw8PDxMZBAMDAwMDAwMOCwkPCREM" DATA "Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Hx4DKQ8PDw8SBQoKCgoKCicCBA8PCQYwPz8/Pz8/Pz8/" DATA "Pz8AAD8/Pz8/Pz8/Pz8/PyQyAw8PDw8XGQMKCgoNFRkNDw8PIQwbPz8/Pz8/Pz8/Pz8AAD8/Pz8/" DATA "Pz8/Pz8/Px8HPQMPDw8PAicCDhkOAgsPDw88Gh0/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8s" DATA "GjUDDw8PFhIVEA8PDw8PKSkGAT8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/ASQoAykPDw8P" DATA "Dw8PDw8pPB4BCj8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/PzAMLQMDAykPDw8pAwMfBwE/" DATA "Pz8/Pz8/Pz8/Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/Pz8UAQwsJTUDAwMyLAceMj8/Pz8/Pz8/Pz8/" DATA "Pz8/Pz8AAD8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz0dGgwvLy8kLBQ/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8AAA==" DATA "@"
' on remplie la dlist qui servira pour le décodage DLIST 2 : READ a$ WHILE a$<>"@" ITEM_ADD 2,a$ READ a$ END_WHILE
' On ouvre le fichier temporaire de destination FILEBIN_OPEN_WRITE 30,DIR_CURRENT$+"\resultat.bmp" ' puis on décode chaque ligne de notre Dlist FOR ligne=1 TO COUNT(2) Src$ = ITEM_READ$(2,ligne) FOR i = 1 TO LEN(Src$) STEP 4 ' on récupère un groupe de 4 caractères a$ = MID$(Src$,i,4) ' puis on calcule sa valeur qui correspondra à 3 octets (24 bits) v = 0 FOR j = 1 TO 4 ' en sachant que A=0, B=1, C=2, etc... ' on détermine la valeur du caractère k = INSTR(code64$, MID$(a$, j, 1)) - 1 ' puis on l'ajoute à la valeur en cours ' chaque caractère correspond à 6 bits v = (v * POWER(2,6)) + k : ' décalage de 6 bits vers la gauche + nouvelle valeur NEXT j ' v contient 3 octets b$=HEX$(v):WHILE LEN(b$)<6:b$="0"+b$:END_WHILE filebin_hexa_write 30,3,b$ NEXT i NEXT ligne FILEBIN_CLOSE 30 PICTURE 20 FILE_LOAD 20,DIR_CURRENT$+"\resultat.bmp" FILE_DELETE DIR_CURRENT$+"\resultat.bmp" : ' suppression du fichier temporaire MESSAGE "Décodage terminé !"+CRLF$+"L'image apparait dans le formulaire..." TERMINATE J'ai pas encore ecrit le programme de codage mais je m'y attelle dès que j'en trouverai le temps... | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Décodage base64 Ven 24 Aoû 2012 - 12:55 | |
| J'essayerais ça ce soir, mais je suis content que tu es de nouveau envie de programmer des trucs Tu dois pouvoir coder aussi directement une image par ce biais sans avoir à passer par un fichier résultat, mais directement en le mettant dans une picture | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 24 Aoû 2012 - 13:08 | |
| Manque plus que l'encodeur et ce sera parfait... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Ven 24 Aoû 2012 - 16:09 | |
| - Jicehel a écrit:
- J'essayerais ça ce soir, mais je suis content que tu es de nouveau envie de programmer des trucs
Tu dois pouvoir coder aussi directement une image par ce biais sans avoir à passer par un fichier résultat, mais directement en le mettant dans une picture L'envie de programmer ne m'a jamais quitté, c'est seulement que je ne programme pas uniquement qu'en Panoramic et que certains projets me prennent pas mal de temps... Quand au bout de code, c'est juste un exemple et on peut certainement l'adapter en fct des besoins... Voici le petit prog de codage : - Code:
-
' -------------------------------------------- ' CODAGE D'UN FICHIER EN BASE 64 ' Auteur : Nardo ' -------------------------------------------- DIM code64$ : code64$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" DIM b64File$,b64Path$ DIM ligne$ DIM i,j,k,l,v,v1 DIM Src$,a$,b$ OPEN_DIALOG 1 FILTER 1,"images|*.*" b64File$=FILE_NAME$(1) b64Path$=FILE_EXTRACT_PATH$(b64File$) b64File$=FILE_EXTRACT_NAME$(b64File$) DIM cur:cur=1 DIM Size,nbpack IF FILE_EXISTS(b64Path$+b64File$)=1 FILEBIN_OPEN_READ 40,b64Path$+b64File$ FILE_OPEN_WRITE 50,b64Path$+"resultat.bas" Size = FILEBIN_SIZE(40) l=0 : nbpack=0 ligne$="DATA "+CHR$(34) FOR i=1 TO Size STEP 3 v = 0 IF i+3 > Size THEN l=Size-i+1:EXIT_FOR FOR j=1 TO 3 : FILEBIN_READ 40,k : v = (v*256)+ k : NEXT j ' v contient 3 octets a$="" FOR j=1 TO 4 : ' 4 groupe de 6 bits v1=BIN_AND(v,POWER(2,6)-1) a$=MID$(code64$,v1+1,1)+a$ v=int(v/64) NEXT j ligne$=ligne$+a$:nbpack=nbpack+1 if nbpack=20 nbpack=0 file_writeln 50,ligne$+CHR$(34) ligne$="DATA "+CHR$(34) end_if NEXT i v=0 ' cas particulier : la taille du fichier n'est pas un multiple de 3 ' il reste L octets IF l<>0 FOR i=1 TO l : FILEBIN_READ 40,k : v=(v*256)+k : NEXT i WHILE l<3: v = v*256 :l=l+1: END_WHILE a$="" FOR i=1 TO L+1 v1=BIN_AND(v,POWER(2,6)-1) if i <= l+1 THEN a$=MID$(code64$,v1+1,1)+a$ v = int(v / 64) NEXT i file_writeln 50, "DATA "+CHR$(34)+LEFT$(a$,3-((24-(L*8))/8))+CHR$(34) END_IF FILE_CLOSE 50 FILEBIN_CLOSE 40 MESSAGE "Codage terminé !" END_IF TERMINATE C'est pas très propre, il demande à être améliorer... c'est fonctionnel mais il me reste à vérifier l'intégrité des 2 ou 3 derniers octets en fin de fichier lors du codage... c'est pas dramatique, ça marche quand même, mais c'est à contrôler... | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Décodage base64 Ven 24 Aoû 2012 - 16:37 | |
| Peut-on directement lire les données d'une image en mémoire pour en stocker les valeurs ? (Les valeurs hexa ?) L'idée, en clair, ce serait tout comme on a un 2D_IMAGE_COPY N,X1,Y1,X2,Y2 d'avoir l'équivalent d'un STR$=2D_IMAGE_READ N,X1,Y1,X2,Y2 qui récupérerais sous forme de chaine hexa, les valeurs du carré (X1,Y1),(X2,Y2) de l'image ou du picture N Est-ce que c'est déjà à ce jour réalisable en construisant une fonction ou en utilisant la DLL de Klaus ? | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 24 Aoû 2012 - 18:48 | |
| C'est une base de travail intéressante pour des gens comme moi qui apprennent par le décorticage de code. Pour coloramic, je suis parti d'une fonction écrite par jicehel ( une douzaine de ligne) pour changer les pixels 0,0,0 en 0,0,1 de façon à ne pas avoir dégradation d'image sur un sprite à cause de la transparence. Et tu vois ou j'en suis arrivé... Il n'y a pas de petit code, il y a des codes astuce ( c'est comme çà que je les appelle ) et çà sert bien pour apprendre. Merci pour ce code Nardo26... | |
|
| |
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Décodage base64 Ven 24 Aoû 2012 - 18:56 | |
| Bonjour Nardo, Je viens d'essayer tes 2 programmes d'encodage et décodage d'une image en data. C'est très bien, mais si on choisit une image jpg, au réencodage elle ne marche pas, à moins que,... je viens de comprendre! Du moins je crois, je ferai l'essai demain, il faut mettre resultat.jpg et pas resultat.bmp... J'ai tenté de coder une image de 256x256, une trentaine de secondes en gros et au décodage, la même chose, mais j'avais pas le même dessin à l'arrivée: j'ai pris l'image de texture de poisson1.bmp dans mon aquarium3d... N'empêche que ce genre de petit programme pour encoder une image en data serait bien pratique pour réduire le nombre de fichier dans nos application comme l'a si bien expliqué Ygeronimi dans ce post ou un autre je crois,... Bon je tombe de sommeil et de fatigue, à demain... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 24 Aoû 2012 - 19:44 | |
| je vais finir par choper le vice du chrono avec vous, je vais chronométrer le temps de codage de mon D.I.C ( Data Image Creator )... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 24 Aoû 2012 - 23:49 | |
| 10 secondes 25 pour D.I.C sur un bmp de 225x225 | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Jeu 30 Aoû 2012 - 21:57 | |
| Bonsoir, J'ai corrigé les routines de codage et de décodage... Vous trouverez les sources commentées sur mydrive.ch. Username : panoramic@nardo26 Password : panoramic123 Dans le répertoire: Panoramic\Src\Codage binaire64 prog.bas -> utilitaire de codage/décodage Les deux autres fichiers (code.bas, decode.bas) sont des exemples d'intégration. PS : Ce système de codage n'a d'intérêt que pour des petites images... Pour de plus amples infos, je vous conseille l'article dans wikipedia -> voir ici | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 31 Aoû 2012 - 0:08 | |
| Je vais voir çà de plus près... mais je n'avais pas vu de bug dans tes codes... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Ven 31 Aoû 2012 - 7:04 | |
| Pourtant il y en avait un : Lors du codage, on prends des groupes de 3 octets (3 * 8 bits) que l'on recode en groupe de 4* 6 bits... Pourquoi 6 bits ? Parce que cela nous fait 64 combinaisons possibles (2^6 - 1 => 0 à 63), donc 64 caractères affichables (voir code64$ dans le source). Si la taille du fichier n'est pas un multiple de 3 on se retrouve avec 1 ou 2 octets en fin de fichier à coder à part. Dans le codage base64, il existe un caractère (=) qui signale un groupe incomplet. C'est ce cas qui était mal traité... C'était pas gênant pour un bitmap (bmp) mais dans le cas d'un jpg celui-ci se termine obligatoirement par "FFD9" en hexa et ces 2 octets n'étaient pas restitués correctement lors du décryptage...donc le fichier était corrompu... Pour la petite histoire: Le codage en base64 est notamment utilisé dans les feuilles de style de certaines page web. pour modifier l'apparence des puces dans une liste ordonnée par exemple, cela évite de charger une floppé de petits fichiers bitmap lors du chargement de la page par le navigateur. Donc en employant cette méthode on diminue le nombre de requête HTTP, on obtient ainsi un gain de temps... il existe aussi une autre méthode pour diminuer le nombre de requête : les sprites. (on regroupe plusieurs images en une seule) C'est ce système qui est utilisé par exemple sur ce forum (voir les petites flèches jaunes) et également Google (voir ici )mais là c'est un autre sujet | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Lun 3 Sep 2012 - 20:15 | |
| Bonsoir, Actuellement, le programme permet de sauvegarder une image dans plusieurs types de format. Comment faire pour informer l'utilisateur des différents format existants ? Actuellement j'utilise un SAVE_DIALOG avec un FILTER = "Fichier image|*.JPG;*.BMP;*.GIF;*.PNG;*.TIF;*.ICO;*.EMF;*.WMF" Mais "fichier image" est trop vague à mon gout... Faire un SAVE_DIALOG personnalisé avec une sorte de popup proposant les différents formats ? (cette solution parait la plus appropriée, mais faire une usine à gaz pour juste cette fonction me rebute...) J'aimerais avoir votre avis... Pour info: je met régulièrement à jour le source de mon prog sur mydrive.ch donc pour ceux qui veulent essayer, n’hésitez pas à y faire un tour... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 3 Sep 2012 - 20:49 | |
| à la place de "Fichier Image|....." tu peux remettre les formats "jpg,bmp,.....|" | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Décodage base64 Lun 3 Sep 2012 - 20:50 | |
| Propose un cumbo ou un option_container avec des options à cliquer pour choisir le format. Puis, après file_name$, tu vérifies l'extension. S'il n'y en a pas, tu ajoutes l'extension choisie. Si ce n'est pas la bonne extension, tu fais un message... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Lun 3 Sep 2012 - 20:51 | |
| @Ygeronimi : Oui j'y ai penser mais ça va faire un truc à rallonge... pas terrible... L'idée de Klaus est interessante... je vais voir ce que je peux faire... merci ! | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 3 Sep 2012 - 20:54 | |
| C'est une bonne solution aussi et tu peux gérer le format avant qu'il crée un bug si il n'est pas admit. | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Lun 3 Sep 2012 - 22:57 | |
| Ça c'est déjà fait ygeronimi... Je pense avoir prévu tous les cas... Le seul cas qu'il reste, mais là je ne peux pas faire grand chose c'est un plantage de la DLL elle-même... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Mar 4 Sep 2012 - 1:17 | |
| Nouvelle version 1.2.1 (voir sur mon webdav) avec une boite de dialogue spécifique pour la sauvegarde des fichiers images... C'est pas très propre, j'ai un peu bousiller ma belle organisation du prog mais ça fonctionne !... C'est juste pour me faire une idée... Je pense par la suite re-coder la chose plus proprement... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 4 Sep 2012 - 11:54 | |
| @ Nardo, Je viens de d'essayer ton programme, pas tout mais un petit morceau. J'ai rajouté : - Code:
-
if dir_exists(dir_current$+"\Dll")=0 then dir_make dir_current$+"\Dll" histoire de savoir où coller KGF.dll et j'ai fait la modif pour la retrouver. Je t'invite à deux choses que je fais maintenant pour éviter de chercher les fichiers D$=dir_current$ puis : if dir_exists(D$+ "\nom du dossier des fichiers nécessaires")= 0 then dir_make D$+ "\nom du dossier des fichiers nécessaires" D_......$=D$+ "\nom du dossier des fichiers nécessaires" if dir_exists( D$+"\nom du Dossier de sortie des fichiers créés")=0 then di_make D$+"\nom du Dossier de sortie des fichiers créés" D_output$=D$+"\nom du Dossier de sortie des fichiers créés" et avec çà, je sais où sont les fichiers de fonctionnement et les fichiers que je créé.... et je peux distinguer un fichier input d'un output ( surtout pour les images ) | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 4 Sep 2012 - 12:04 | |
| J'avais oublié....BRAVO !!!
C'est un programme qui fonctionne bien et qui peut être pratique pour récupérer des images dans des fichiers sources.
| |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Mar 4 Sep 2012 - 13:04 | |
| Merci ygeronimi Pour le chemin d'accès à la DLL, je part du principe qu'au final, pour l'utilisateur lambda, la DLL se trouvera dans le même répertoire que l'exécutable. C'est volontairement que je fige en "dur" le chemin pendant le développement (et en 1ere ligne pour pouvoir facilement le mettre en commentaire si besoin). Au final, il n'y aura pas de chemin... Quand à l'utilisation de DIR_CURRENT$, j'ai essayé, j'ai testé et j'ai abandonné... Quand tu ouvres dans l'éditeur plusieurs sources (qui font des OPEN_DIALOG) et que tu les exécutes/fermes à tout de rôle ou que tu sauvegardes tes sources à partir de l'éditeur, bien malin de savoir à un moment donné, ce que contient véritablement DIR_CURRENT$ -> Pas forcément le répertoire du source en cours d’exécution... Par exemple ton utilitaire sur la conso de gaz/electricité, j'ai retrouvé des dossiers de partout sur mon disque dur ! Dans le cas de mon programme, la création d'un répertoire "Dll" ne m'apporte rien si celui-ci ne contient pas la DLL... Donc c'est à l'utilisateur de s'assurer que la DLL se trouve dans le même répertoire que l’exécutable. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: RE Mar 4 Sep 2012 - 13:20 | |
| Je l'ai fait car panoramic ne retrouvait pas la dll que j'avais mise dans le dossier du source puisque que tu déclares un dossier au début "path$" Edit : au début j'utilisais "dir_current$" à chaque fois seul et effectivement il y avait une dispersion des fichiers maintenant je déclare une variable qui contient l'adresse du dossier source dès l'ouverture et après je me sers de la variable et plus de "dir_current$" et fini la dispersion des fichiers... Edit 2: tu remarqueras que dans mes prog les plus récent, j'initialise dans des variables toutes les adresses dès le départ... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Décodage base64 Mar 4 Sep 2012 - 14:00 | |
| Même en faisant comme cela, tu n'es pas à l'abri.... Prenons un exemple: - Crées 2 répertoires : C:\ex1 et C:\ex2 - Dans chaque répertoire tu rajoute un fichier qui contient cette ligne: - Code:
-
MESSAGE DIR_CURRENT$ Donc on a : C:\ex1\exemple1.bas C:\ex2\exemple2.bas - Tu fermes les 2 fichiers - puis tu les recharge dans l'éditeur Panoramic en respectant cet ordre : C:\ex1\exemple1.bas . C:\ex2\exemple2.bas . - Lance l'exécution des 2 programmes à tour de rôle... Quelque-soit le programme que tu lances, ils vont te renvoyer tous les deux "C:\ex2" pourtant exemple1.bas ne se trouve pas dans C:\ex2. DIR_CURRENT$ te renvoi le dernier répertoire ouvert et c'est normal ! Ce qu'il faut retenir c'est qu'il ne faut pas partir du principe que cette variable correspond systématiquement au répertoire du source exécuté. c'est faux ! Si par malheur, exemple1.bas crée des répertoires tu vas les retrouver dans le répertoire du dernier fichier ouvert par panoramic (que ce soit l'editeur ou suite à un OPEN_DIALOG/SAVE_DIALOG d'un autre programme) DIR_CURRENT$ porte bien son nom. Si on voulait appliquer ton raisonnement, il faudrait avoir en sa possession une variable DIR_APPLICATION$. et encore que doit-elle contenir dans le cas d'un nouveau programme pas encore sauvegardé ?...
Dernière édition par Nardo26 le Mar 4 Sep 2012 - 14:09, édité 1 fois | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Décodage base64 Mar 4 Sep 2012 - 14:08 | |
| En fait, il faudrait une variable DIR_SOURCE$ qui correspondrait au répertoire au se trouve le fichier .BAS (ou .EXE une fois compilé) qu'en pensez vous ? | |
|
| |
Contenu sponsorisé
| Sujet: Re: Décodage base64 | |
| |
|
| |
| Décodage base64 | |
|