|
| Copier uniquement les fichiers différents |
| Iniciado por MB, 06,may. 2020 21:21 - 17 respuestas |
| |
| | | |
|
| |
Miembro registrado 62 mensajes |
|
| Publicado el 06,mayo 2020 - 21:21 |
bonjour, j'utilise ces 3 petites lignes de code :
fCopieFichier("*.fic","Données Maintenance"+DateVersChaîne(DateSys(),"JJ-MM-AAAA"),frJauge) fCopieFichier("*.mmo","Données Maintenance"+DateVersChaîne(DateSys(),"JJ-MM-AAAA"),frJauge) fCopieFichier("*.ndx","Données Maintenance"+DateVersChaîne(DateSys(),"JJ-MM-AAAA"),frJauge)
elles sauvegardent simplement mes fichiers dans un répertoire Données Maintenance
j'aimerais effectuer un petit changement. Celui de remplacer la sauvegarde de tous les fichiers, par la sauvegarde uniquement des fichiers différents (donc ceux qui auraient été modifiés pour faire simple)
j'ai trouvé le terme de "hidentique" quelque part mais je n'arrive pas à l'exploiter ni trouver la solution. si ca intéresse quelqu'un de m'aider merci.
-- M. B. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 49 mensajes |
|
| Publicado el 07,mayo 2020 - 06:40 |
Bonjour moi pour tester si un fichier existe je fais
HRecherchePremier(Nom_Fichier,Cle,valeur_a_tester) SI HTrouve = Vrai
SINON
FIN
je sais pas si c'est une bonne méthode mais elle fonctionne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 07,mayo 2020 - 08:49 |
Bonjour, Regarde du côté de HVersion. Il suffit de comparer le N° de version actuel avec celui de la dernière utilisation de l'application. Les MMO et NDX étant intimement liés aux FIC, si la version du FIC a changé (i.e. la table a été modifiée,) celle des MMO et NDX aussi.
Sinon, en HFSQL/CS, il suffit de configurer tes backups. En CLASSIC, tu peux ajouter tes conditions à ton logiciel de backup préféré. Il suffit d'ajouter
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 62 mensajes |
|
| Publicado el 07,mayo 2020 - 20:28 |
merci de ta réponse mais je voudrais copier uniquement les fichiers "modifiés" vers mon répertoire de sauvegarde et non pas savoir si les fichiers existent déjà.
-- M. B. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 07,mayo 2020 - 20:54 |
Si tu avais lu la doc de Version, tu aurais vu que si la valeur de version a changé, c'est que le fichier a été modifié.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 07,mayo 2020 - 20:55 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 310 mensajes |
|
| Publicado el 08,mayo 2020 - 11:19 |
Bonjour, Il faut s'entendre sur le terme MODIFIER : Certains parlent de modification de structure, d'autres de contenu.
Je pense que MB parle de contenu, auquel cas, on peut (par exemple) faire une comparaison physique de 2 fichiers avec fCompare() et ne copier que si un changement a été opéré depuis la dernière copie.
Bon dev |
| |
| |
| | | |
|
| | |
| |
| Publicado el 08,mayo 2020 - 12:09 |
Bonjour,
Très bonne remarque Samir ! Bon dev
Rastam |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 62 mensajes |
|
| Publicado el 08,mayo 2020 - 13:46 |
Voroltinquo, Avant d'avancer que je n'ai pas lu la doc, commence d'abord par me poser la question. Ensuite tu pourras parler de façon certaine, sans dire n'importe quoi. J'ai lu la doc... Mais mon niveau n'est certainement pas au niveau du tient en programmation Windev c'est certain. Aussi, si je viens (rarement) sur ce forum, c'est pour essayer d'obtenir de l'aide et parfois une solution de la part de quelqu'un qui trouve du plaisir à aider. Je te remercie toutefois d'avoir "participé" à résoudre mon problème. ... Il y a peut être plus simple, mais, ça ne tourne pas obligatoirement pour tous...
-- M. B. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 62 mensajes |
|
| Publicado el 08,mayo 2020 - 13:49 |
Samir, c'est effectivement ce que je voulais dire. c'était en effet le contenu et non pas la structure. j'avais peut-être mal formulé ma question mais tu as vue juste. je vais essayer dCompare et essayer de trouver la solution merci de ton intervention et bonne journée.
-- M. B. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 08,mayo 2020 - 22:02 |
Bonjour, Voroltinquo a raison, inutile de vous emporter, surtout pour des personnes qui donne beaucoup de leur temps pour les débutants. En fait hVersion ne signifie pas que le fichier a été modifié dans l'analyse. HVersion permet en effet de savoir si vous avez fait un insert, un update ou un delete sur le fichier. C'est la méthode la plus simple de faire ce que vous demandez. fCompare est surtout utilisé pour des fichiers autres que HyperFile ( Vous êtes certainement en Classic). Quand vous passerez en C/S vous verrez que la réponse de Voroltinquo est encore plus indiqué. De plus fCompare fait une comparaison Byte par Byte, question perfomance c'est limite.
La seule chose dans votre cas c'est que en utilisant HVersion, vous devez stocker quelques par dans votre BD ou dans un fichier txt la valeur de votre Hversion récupérée lors de la dernière sauvegarde de votre fichier.
nIdVersionDuFichier est un entier = HVersion(NomFichierHyperF) //A stocker avec la dernière sauvegarde
Avant la nouvelle sauvegarde vérifier que HVersion n'a pas changé. Si c'est le cas c'est qu'un enregistrement a été modifié.
Bon Dev |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 62 mensajes |
|
| Publicado el 09,mayo 2020 - 17:33 |
Bonjour BMarcellin, je ne m'emporte pas  mais participer à un forum d'aide avec comme réponses des "t'as qu'à lire..." ou "c'est pourtant simple..." je ne trouve pas ça très aidant. mais l'incident est clos. merci de votre contribution à mon post. votre proposition commune avec Voroltinquo pour HVersion est sûrement la bonne, mais trop compliquée pour moi. avec la proposition de Samir et une petite recherche, j'ai saisi les quelques lignes ci dessous :
ResComparaison est un entier ResComparaison = fCompare("VEHICULES.FIC", "Sauvegarde\VEHICULES.fic") SELON ResComparaison CAS 0 : FinProgramme() CAS 1 : fCopieFichier("ASCENSEURS.FIC", "Sauvegarde\VEHICULES.fic") CAS -1 : Info("Le premier fichier n'a pas été trouvé") CAS -2 : Info("Le second fichier n'a pas été trouvé") CAS -3 : Erreur(ErreurInfo(errMessage)) FIN FinProgramme()
le résultat est exactement ce que je voulais. seul problème maintenant c'est que j'ai dans mon application 50 fichiers et je ne trouve pas la solution pour réaliser l'équivalent de ces lignes de code qui ne concernent qu'un fichier pour la totalité de mes fichiers. merci et bonne fin de journée
-- M. B. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 09,mayo 2020 - 18:21 |
Bonjour, Regarde du côté de HListeFichier
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 10,mayo 2020 - 10:01 |
En fait tout (ou presque) se passe au niveau de l'initialisation et de la fermeture du projet. Dans l'initialisation on va récupérer les couples(NomFichier,Version) que l'on aura sauvegardé dans la fermeture du projet. HListeFichier renvoie quelque chose qui peut (et va) être converti en tableau. Ce tableau sera modifié (au niveau de la version) au fur et a mesure des sauvegarde. Il y a sauvegarde, donc le fichier a été modifié donc sa version a changé. On peut travailler sur un tableau "classique" de 2 chaines, (Nom,Version) à la limite dans notre cas, un tableau associatif serait mieux, nous aurions un tableau d'entier indexé sur le nom. J'ai opté pour un tableau de structures, et comme la sauvegarde concerne cette structure, je suis passé à un tableau de classes.
Cette classe est quasiment minimaliste. 2 membres, un constructeur, 2 getters et un setter (propriétés en WLangage) et une méthode (la sauvegarde).
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 10,mayo 2020 - 10:22 |
Comme on ne peux plus éditer, il y aura plusieurs post. Classe CVersionFichier :
CVersionFichier est une Classe PRIVÉ m_sNomFichier est une chaîne m_nVersioninitiale est entier FIN
Procedure Constructeur(sFichier est chaîne="") SI sFichier<>"" ALORS m_sNomFichier=sFichier m_nVersioninitiale=HVersion(sFichier) FIN
Procedure PUBLIQUE p_NomFichier() : chaîne
RENVOYER m_sNomFichier Procedure PUBLIQUE p_VersionInitiale() : entier
RENVOYER m_nVersioninitiale
Procedure PUBLIQUE p_VersionInitiale(nValeur est un entier)
m_nVersioninitiale=nValeur
Procedure Sauvegarder(bTotale est un booléen=Faux) sCheminOrigine est une chaîne sDestination est chaîne
nVersionActuelle est entier
ErreurPropage("Erreur de sauvegarde")
sCheminOrigine=fConstruitChemin(fRepDonnées,:p_NomFichier,"FIC") sDestination=ChaîneConstruit("%1%2%3",ComplèteRep(fRepDonnées),"Sauvegarde",DateVersChaîne(DateDuJour,"JJ-MM-AAAA")) nVersionActuelle=HVersion(:p_NomFichier)
SI (:p_VersionInitiale<>nVersionActuelle) OU bTotale ALORS SI PAS fRepExiste(sDestination) ALORS fRepCrée(sDestination) FIN fCopieFichier(sCheminOrigine,sDestination,frJauge) :p_VersionInitiale=HVersion(:p_NomFichier) FIN
*************************** * Initialisation du projet * **************************
gtabListeVersion est tableau de CVersionFichier gbufSauvegardeVersion est Buffer
gbufSauvegardeVersion=ChargeParamètre("Versions","") InitialiserVersions()
CAS ERREUR: Erreur("Une erreur est survenue dans l'initialisation",ErreurInfo(errMessage))
On va détailler :
Procedure InitialiserVersions()
SI gbufSauvegardeVersion="" ALORS RécupérerVersionCourante() SauvegardeTotale() SINON Désérialise(gtabListeVersion, gbufSauvegardeVersion, psdBinaire) FIN On approfondit :
Procedure RécupérerVersionCourante() sListe est chaînes sFichier est chaîne clFIchierCourant est CVersionFichier
sListe=HListeFichier() POUR TOUTE chaîne sFichier de sListe SEPAREE PAR RC clFIchierCourant=allouer un CVersionFichier(sFichier) TableauAjouteLigne(gtabListeVersion,clFIchierCourant) FIN
Procedure SauvegardeTotale() clFichierEnCours est CVersionFichier
POUR TOUT clFichierEnCours de gtabListeVersion clFichierEnCours:Sauvegarder(Vrai) FIN
Enfin la fermeture du projet :
Sérialise(gtabListeVersion,gbufSauvegardeVersion,psdBinaire) SauveParamètre("Version",gbufSauvegardeVersion)
Le plus gros est fait.
Ta sauvegarde différentielle maintenant c'est la petite sœur de la sauvegarde totale à un paramètre près :
Procedure BackupDifférentiel() clFichierEnCours est CVersionFichier
POUR TOUT clFichierEnCours de gtabListeVersion clFichierEnCours:Sauvegarder() FIN
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 62 mensajes |
|
| Publicado el 10,mayo 2020 - 17:57 |
Wahhhh... Merci à toi Voroltinquo. Je n'ai pas le temps ce soir de me pencher sur cette aide (qui à premier abord me fait peur ) mais je me lancerais le we prochain à tête reposer. Merci d'avoir pris du temps pour cette aide. Passes une bonne fin de we.
-- M. B. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 10,mayo 2020 - 18:35 |
A la limite, il faut commencer par la fin. On effectue la procédure de sauvegarde pour chaque paire (Fichier,version) des fichier de l'analyse. Il faudra ensuite voir comment la sauvegarde est effectuée (ou pas) etc... J'ai l'habitude d'atomiser donc le code semble lourd, mais il est finalement plus simple à lire, à tester et à debugger (au cas où)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 62 mensajes |
|
| Publicado el 15,mayo 2020 - 15:39 |
Bonjour Voroltinquo, demain je me lance dans tes explications... mais au cas ou je ne redonne pas de nouvelle suite à un échec et un isolement de ma part loin de la civilisation, je m'aperçois que dès le début j'aurais du mentionner le terme de "synchroniser". C'est en effet, peut-être qu'en employant d'entrer ce terme j'aurais été plus clair. "Synchronisation de mes fichiers de travail vers mon répertoire de sauvegarde" Je pense que si j'avais employer le bon terme cela aurait été plus simple. Bonne fin de journée.
-- M. B. |
| |
| |
| | | |
|
| | | | |
| | |
|