PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Renommer x fichiers ou rien (sorte de commit rollback)
Renommer x fichiers ou rien (sorte de commit rollback)
Débuté par John Do, 13 déc. 2018 11:32 - 6 réponses
Posté le 13 décembre 2018 - 11:32
Bonjour,

J'ai plusieurs fichiers à renommer de façon régulière et il ne faut pas qu'une partie des fichiers soit renommés et pas les autres (coupure réseau, etc)

Comment puis-je faire pour avoir un code équivalent au commit / rollback pour les bases de données ?
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 13 décembre 2018 - 12:37
Hello,

Dans ce cas, je te conseille de dresser une table historique des tes renommages
STRenommage est une structure
sAncienNomFichier est une chaine
sNouveauNomFichier est une chaine
FIN

taHistoriqueRenommage est un tableau de STRenommage

Dans la boucle fichier par fichier tu execute ton code et a chaque fichier renommer tu ajoute une occurrence a ton tableau
En cas d'erreur tu renvoi faux
Et tu parcours le tableau pour remettre les fichiers dans leur nom d'origine

Je ne vois que ça
Membre enregistré
96 messages
Popularité : +18 (20 votes)
Posté le 13 décembre 2018 - 14:13
Bonjour,

de la manière où tu présentes la chose, ça me parait très compliqué.

Comme c'est présenté, j'émets l'hypothèse que tu renommes tes fichiers à travers le réseau, ce qui signifie que tu n'as plus accès à tes fichiers en cas de coupure réseau. C'est donc difficile de les remettre d'aplomb si tu n'as plus accès à l'emplacement.

Voici une solution que j'imagine pour ton besoin.

- 1. Regarder le répertoire initial (nommé A)
- 2. Créer un répertoire temporaire (nommé B) sur le poste destination (certainement à travers le réseau)
- 3. Copier chaque fichier à renommer dans ce répertoire et lui donner le bon nom
- 4. Si la copie se fait jusqu'au bout, donner un autre nom au répertoire initial (nommé C)
- 5. Puis renommer le répertoire temporaire (B) avec le nom du répertoire initial (A)
- 6. Supprimer le répertoire initial (C)

Si tu as une coupure durant les étapes 1 à 4, c'est la partie la plus longue de ton traitement, mais tes fichiers n'ont pas été renommés
Si tu as une coupure durant l'étape 5, tu es dans la galère mais c'est aussi la partie du traitement la plus rapidement
Si tu as une coupure durant l'étape 6, ce n'est pas trop grave mais il faudra faire le ménage dès que possible.

L'équivalent du commit / rollback dont tu parles, c'est possible tout simplement parce que l'application qui gère la base de données est sur le serveur qui contient la base de données. Mais si l'application n'avait plus accès à la base de données pendant le commit ou le rollback, la base serait dans un état instable jusqu'à ce qu'elle soit accessible (mais dans ce cas, on ne s'en rend pas compte vu qu'on ne peut plus accéder aux données et dès que l'accès se refait, l'application répare les transactions échouées).

J'espère que cette piste te donnera des idées.

--
Johjo aka Jonathan Laurent

Codez mieux ! Codez plus vite !

Mon blog sur WinDev : http://www.ytreza.org
Me contacter sur slack (wx-community) : https://frama.link/BoBD0SY0
Faîtes moi un ping : http://www.ytreza.org/fr/services/ping-sur-forum
Membre enregistré
81 messages
Popularité : +2 (4 votes)
Posté le 13 décembre 2018 - 17:20
Johjo : c'est aussi la solution que nous utilisons.

+1
Posté le 13 décembre 2018 - 18:04
Bonsoir,
Un traitement tacheparallèle irait.
Membre enregistré
81 messages
Popularité : +2 (4 votes)
Posté le 14 décembre 2018 - 09:03
Ralph a écrit :
Bonsoir,
Un traitement tacheparallèle irait.



Bonjour,
je suis curieux... en quoi le fait de passer le ttraitement de copie des fichiers reglerait son probleme ?

pour resumer, il a 100 fichiers à renommer

il ne veut pas que les 50 premiers fichiers soient renommés, qu'à ce moment là plantage reseau et hop tout s'arrete.
bilan la moitié des fichiers uniquement renommés

j'arrive pas à comprendre comment une tache parallele reglerait ce souci, peux tu m'eclairer, car là ça m'interesse.
Posté le 20 décembre 2018 - 15:21
Merci pour vos avis, pas simple car mon dossier est alimenté en fichiers par un flux externe. Je ne peux pas le supprimer et des fichiers peuvent se rajouter.

Je pense quand même passer par un dossier temporaire avec un nom qui me permet d'avoir des infos sur l'étape en cours en cas de coupure, ça me permettra de gérer la reprise.