Gambas France BETA


Pas de compte ? Incription

Déboires avec Copy

Ce sujet est résolu.

12
AuteurMessages
Foromus#1 Posté le 18/11/2016 à 18:52:40
Bonjour,

Encore un truc où je m'arrache les cheveux.
Sur mon projet de sauvegardes, j'ai deux possibilités : en interne sur un répertoire d'un autre disque, en externe sur un périphérique.
Dans mon projet, j'ai deux procédures, l'une pour l'interne, l'autre pour l'externe. Elles sont strictement identiques, à la destination près, évidemment. A l'époque, j'avais opté pour deux procédures, de manière à faire des choses plus claires. Et le truc a marché pendant des années...
Aujourd'hui, j'ai un cas tout à fait aberrant : ça fonctionne normalement pour l'interne, ça plante pour l'externe !
Et ça plante de deux façons :
Dans chaque procédure, interne ou externe, il y a sauvegarde de répertoire, et ensuite, sauvegarde de fichiers, donc, deux choses bien distinctes et qui se déroulent comme ici présenté, d'abord les répertoires, ensuite les fichiers.
Première chose : au niveau des répertoires, ça ne copie que partiellement et encore, beaucoup de sous-répertoires passent à la trappe ! Mieux encore, mon répertoire "Documents" est disséqué, et il n'apparaît pas, mais par contre, son contenu (fichiers) est balancé dans le répertoire de destination, avec les quelques répertoires qui ont été recopiés !
Deuxième chose : au niveau des fichiers, c'est simple, ça plante tout de suite, et comme j'ai un catch dans la procédure, je m'y retrouve direct...
A un moment donné, le déroulement s'est passé normalement, j'ai cru que c'était gagné, pas du tout, ça bloque. J'ai tenté le .gambas, il y a certaines fois où ça risque de marcher, enfin, d'après mon vécu, là, rien de positif. Parmi mes essais de support externe, j'ai tenté avec un clé USB, ça bloquait, j'en ai pris une autre, ça a marché un coup, j'ai pris un disque externe, ça a aussi marché deux coups, depuis, blocage total, alors que je n'ai rien changé au code !
Bon, là, il va falloir que je prenne des vitamines...
Enfin, si ça inspire quelqu'un...
Flachy Joe#2 Posté le 20/11/2016 à 11:28:43
Iguane : Il Gambas Uniquement pour Activer ses NEuronesEst-ce que tu peux partager le code qui plante ?
;) Flachy Joe ;)
Foromus#3 Posté le 20/11/2016 à 17:47:21
Bonjour,

Pas de soucis pour le code qui plante, je mets ici la procédure concernée :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
PUBLIC SUB cmdSaveExterne_Click()
DIM N AS INTEGER
DIM Annonce AS STRING

BlocBouton
pnCopies.Visible = TRUE

' Copie fichiers
IF Ge.NbreFichEnregistres > 0 THEN
lblDestination.Text = "Copie externe vers " & Ge.FichCibExt
FOR N = 1 TO Ge.NbreFichEnregistres
lblCopieEnCours.Text = "Copie de " & Ge.FichOrigRep[N]
Annonce = Ge.FichOrigRep[N]
IF Exist(Ge.FichCibExt & "/" & Ge.FichOrigNom[N]) THEN KILL Ge.FichCibExt & "/" & Ge.FichOrigNom[N]
WAIT 0.2
COPY Ge.FichOrigRep[N] TO Ge.FichCibExt & "/" & Ge.FichOrigNom[N]
WAIT 0.2
pgCopie.Value = N / Ge.NbreFichEnregistres
'Me.Show
NEXT
WAIT 0.1
ENDIF

'Copie répertoires
IF Ge.NbreRepEnregistres > 0 THEN
lblDestination.Text = "Copie externe vers " & Ge.RepCibExt
pnCopies.Visible = TRUE
Label2.Visible = FALSE
lblChemSelect.Visible = FALSE
FOR N = 1 TO Ge.NbreRepEnregistres
lblCopieEnCours.Text = "Copie de " & Ge.RepOrigRep[N]
Annonce = Ge.RepOrigRep[N]
WAIT 0.2
EXEC ["cp", "-R", Ge.RepOrigRep[N], Ge.RepCibExt]
WAIT 0.5
pgCopie.Value = N / Ge.NbreRepEnregistres
'Me.Show
NEXT
WAIT 0.1
ENDIF

lblCopieEnCours.Text = "Copies effectuées avec succès !"
'Enregistrement Date
Ge.EnregDate
WAIT 5
pnCopies.Visible = FALSE
Label2.Visible = TRUE
lblChemSelect.Visible = TRUE
Depart

CATCH
' En cas d'erreur ou de manque de fichier
Message.Warning("Le fichier " & Annonce & " est absent ou défectueux." Chr$(13 "Le programme va être arrêté.Chr$(13) & "Veuillez réparer et relancer le programme.")
Ge.Quitter
END


J'ai collé des Wait un peu partout car il semblerait que Gambas sature assez vite ce qui peut paraître logique pour un langage interprété, même si j'ai maintenant une CPU qui pédale un peu plus vite et une RAM doublée.
Je précise que j'ai aussi inversé, j'ai mis la copie des fichiers avant celle des répertoires, parce que c'est surtout au niveau des fichiers que ça part en erreur (ligne 16). Pour les répertoires, ça ne plante pas, mais il y en a un dans la liste qui n'est recopié que partiellement, il est vrai qu'il est assez nourri et qu'il comprend de nombreux sous-répertoires.
Après, j'ai tellement de soucis avec cette version (xubuntu 16.04) sur cette machine que je ne suis pas certain que ça vienne de Gambas...
gambix#4 Posté le 21/11/2016 à 19:57:13
Faire simple !Je ne veux pas dire mais ton code est un peu bizzard.

Pourquoi tu as une partie dossier et une partie fichier ?


Moins de texte dans une signature c'est agrandir son espace.
Foromus#5 Posté le 22/11/2016 à 13:09:27
Je ne veux pas dire mais ton code est un peu bizzard.

Bonjour à tous,

La logique est une section importante de la philosophie. Son étude requiert une certaine attention, car elle est très très rigoureuse. Cependant, dans son utilisation au quotidien, elle est interprétée de façon toujours personnelle, avec parfois des accommodements assez surréalistes. J'admets bien volontiers que je ne fais pas exception à la règle.
Ma question semblait plutôt orientée vers le besoin de savoir si mon code - bon ou absurde dans son essence - ne dérogeait pas à la syntaxe et aux exigences du langage Basic ici concerné, en un mot, si mon code était susceptible de tourner normalement ou pas. Après que ce soit tordu ou pas, je n'avais pas pensé que cela fut prépondérant.
Mais je me répète, je crois que mes ennuis viennent de mon matériel, plutôt que du soft, et je ne vois pas comment m'en sortir, étant donné que toutes les pièces centrales sont neuves et que la distribution est la dernière en date, et régulièrement mise à jour.
Pour l'heure, je vis un vrai handicap informatique et je n'ai aucune issue en vue.
linuxos#6 Posté le 23/11/2016 à 01:16:04
Un peu de sel, de poivre et la crevette sera... Bonjour Foromus,

Je suis du même avis que Gambix, pourquoi traiter les répertoires et les fichiers en 2 étapes, juste par curiosité.
En tant qu'admin linux depuis longtemps, j'aurais tendance à ne pas vouloir ré-inventer la roue quand le système GNU/Linux propose déja plein de commandes ou programmes pour faire ce que tu fais dans ton programme. Peut-être as tu besoin de contrôle sur la copie des fichiers que tu effectues et donc préfères tu ton propre algorithme.
Voici 2 exemples des commandes qui fonctionnent trés bien, si cela peut t'aider:

1er exemple: commande TAR
Je veux copier le répertoire /home/toto/mes_documents ==> vers /media/cle_usb/sauvegarde/
cd /home/toto
tar cvfz - ./mes_documents | ( cd /media/cle_usb/sauvegarde ; tar xfz - )

tar cvfz
c --> créer une archive tar
v --> mode verbeux
f --> fichier en sortie
z --> compresser les données avec GZIP à la volé

---
tar xfz
x --> extraite les fichers d'une archive tar
f --> fichier en sortie
z --> décompresser les données avec GZIP à la volé


Ici, TAR crée une archive mais l'envoie dans le PIPE, qui a son tour l'envoie dans le TAR d'arrivé. Le premier TAR créer l'archive et le 2eme TAR extrait l'archive. C'est une façon trés efficace de copier toute une arborescence de fichiers/répertoire d'un endroit a l'autre en utilisant uniquement la mémoire RAM.
L'interet d'utiliser TAR c'est que cette commande effectue une copie en préservant exactement tous les droits et propriétés de chaque répertoire et fichier d'origine.
Les parenthèses sont importantes et servent a executer le 2eme TAR dans un sous-shell (ou sous-terminal) afin de pouvoir changer le chemin de destination, sinon trés vite dans l'execution de la ligne au complet le 2eme TAR modifie le chemin du 1er TAR et tout se plante.

2eme exemple: commande RSYNC
Je veux synchroniser le répertoire /home/toto/mes_documents ==> vers /media/cle_usb/mes_documents/
Ici, c'est une synchronisation qui sera faite plutôt qu'une copie, même si au final /media/cle_usb/mes_documents/ sera une copie conforme de /home/toto/mes_documents.
Il y a bien synchronisation car en fait RSYNC compare la source et la destination et ne transfère que ce qui est manquant ou différent, basé sur la taille, l'heure et d'autres paramètres. Si dans le réperoire destination, des fichiers sont déja exitants mais non présents dans la source, alors ils seront supprimés. Bien sur il existe plein d'options pour avoir un comportement différent.

cd /home/toto
rsync -avz --progress ./mes_documents /media/cle_usb/ <== ici le dernier '/' sur la destination est trés important

tar cvfz
a --> utilise les paramètres par défaut
v --> mode verbeux
z --> compresser les données lors du transfert


Résumé: L'utilisation des commandes natives sous Linux ou Unix pour réaliser tes copies de fichiers me parait beaucoup plus sure que de le faire a la main mais ce ne sont que des idée pour t'aider.

Nota: Ces 2 commandes acceptent aussi le SSH pour par exemple copier notre répertoire source sur une autre machine distante comme ceci:

En considerant que je veux copier des données de l'utilisateur 'user1' de la machine 'pc01' vers la machine 'pc02' sous l'utilisateur 'user2'
# Sur la machine SOURCE (ici 'pc01')
cd /home/user1
tar cvfz - ./mes_documents | ssh user2@pc02 "( cd /home/user02/sauvegarde ; tar xfz - )"


J’espère que cela t'aidera dans ta problématique de base: copier des fichiers d'un endroit a un autre.
Je ne pense pas avoir été trop confus dans mes explications mais au cas ou n’hésite pas a demander plus de précisions.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Flachy Joe#7 Posté le 23/11/2016 à 19:12:39
Iguane : Il Gambas Uniquement pour Activer ses NEuronesUne autre question sur la logique du système, pourquoi copier les fichiers AVANT les répertoires ? Si le fichier va dans un répertoire qui n'est pas encore copié, on fait quoi ?
;) Flachy Joe ;)
Foromus#8 Posté le 23/11/2016 à 20:36:02
Bonjour à tous,

Vous allez finir par m'embarrasser...
Pour le dernier, je dirai que la copie des fichiers avant les répertoires n'est pas d'origine, j'ai juste inversé "pour voir", quand ça coinçait. Mais ça n'a strictement aucune importance.
A la question pertinente "on fait quoi ? " Réponse : Rien ! Because les répertoires sont copiés dans un répertoire dédié, les fichiers sont copiés dans un autre répertoire dédié, sans parenté.
Bon, après, que vous trouviez mon truc un peu débile, franchement, je ne vous en veux pas, je dirais même que je vous comprends, car vouloir trouver une explication globale à partir d'une simple procédure, ça relève quand même d'une grande maîtrise et d'une solide intuition.
Je dirai aussi que j'utilise ce code par ailleurs, et forcément, ça coince aussi par là, ça au moins, c'est logique.
Bon, maintenant, j'ai aussi tous ces projets sur une autre machine, et ça tourne correctement, vous comprendrez donc sans peine que cette bricole a tendance à m'agacer, de même que le fait qu'il faille définir le mode de saisie d'une textbox pour que son contenu soit reconnu, me devient insupportable. Croyez bien que ce truc-là me bouffe la rate encore plus que le précédent.
Donc, et si je résume : A code identique, ça marche d'un côté, ça ne marche pas de l'autre, on pourrait peut-être en déduire que "l'autre" n'est pas configuré correctement, non ? Seulement voilà, j'en suis à ma quatrième réinstallation, j'ai changé de matériel entre-deux, et j'ai toujours le souci. J'ai fait des mises à niveau de xubuntu pas mal de fois, c'est la première où je galère de la sorte, mais pire, c'est que je n'entrevois pas l'once du bout de solution. Alors, vous comprendrez que, mon projet est probablement farfelu, peut-être, mais dans la mesure où il correspond à un besoin ou une utilité - même relative, je le prends comme tel. Je n'ai pas le talent pour coder pour autrui, j'en suis sincèrement désolé, il ne me reste donc qu'à bidouiller quelques bricoles pour mon usage personnel, et comme je ne sais pas trop, j'ai parfois recours à l'aide, ce qui ne m'empêche pas de chercher avant d'appeler !
Donc, et si vous voyez quelque anomalie dans mon modeste exposé, croyez bien que je serai ravi de ... me raviser...

Merci pour les tuyaux de linuxos, je pense sincèrement que je vais regarder cela de plus près, mais un peu plus tard car, dans la hiérarchie de mes urgences, je classe les deux soucis sus-mentionné, dans la priorité maximale.
linuxos#9 Posté le 24/11/2016 à 00:04:27
Un peu de sel, de poivre et la crevette sera... Foromus,

Nous ne pensons nullement a mal en te posant ces questions la, bien au contraire, c'est simplement pour comprendre ta logique dans ce bout de code.

Il reste damage que nous n'ayons qu'un bout de code car ce n'est pas suffisant pour t'aider, on ne peut pas l'essayer sur nos machines pour voir comment il se comporte.

Peux tu nous donner toutes les autres fonctions qui sont liés a ton bout de code stp ?

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Foromus#10 Posté le 24/11/2016 à 16:31:08
Bonjour à tous,


Ne vous méprenez pas : je ne prends pas à mal ce que vous me dîtes, j'apprécie assez l'aide que je trouve sur les sites, il serait donc idiot de ma part de jouer les outrés...
En général, je lis ce que l'on me répond, et j'essaie d'en tirer parti, de raisonner en quelque sorte.
Mon projet est strictement limité à un besoin bien précis, il existe nombre d'applications de sauvegardes, qui fonctionnent, et qui pourraient certainement faire l'affaire. Mais j'ai voulu quelque chose de plus personnel, qui ne soit pas une "usine à gaz", et pour vous, je ne sais pas, mais pour moi, je fais d'abord du gambas pour le plaisir, pour la joie de créer quelque chose.
Si vous voulez le projet en entier, je peux balancer un tar.gz sur la forge, cela dit, ça ne vous donnera pas grand chose. Encore que, sur une autre machine, on ne sait jamais.
Je reprends : j'ai quelque chose conçu depuis des mois, qui fonctionnait, et qui ne fonctionne plus sur ma machine, après changement de version. Comme dit précédemment, j'ai des choses qui ne fonctionnent plus sur cette machine (dont ce projet), mais qui fonctionnent normalement sur une autre, donc, je me pose la question du pourquoi du comment. Ce projet n'est pas installé sur mon autre machine (pas besoin), mais j'ai dit précédemment que j'utilisais la procédure concernée par ailleurs (enfin, pas exactement la même, mais très ressemblante), et justement, sur mon autre machine, elle fonctionne normalement. Vous me direz : pourquoi alors avoir demandé de l'aide justement pour cette partie qui fonctionne par ailleurs ? Tout simplement par observation des faits. Il se trouve que j'ai eu des déboires avec le composant "sound" qui a changé de nom et de spécificité entre deux versions de gambas, or, si j'ai eu un plantage inexorable dans un projet sur cette machine, le même projet sur mon portable, lui, continuait à fonctionner. J'en ai déduis que d'une machine à l'autre - et c'est vérifié - il peut y avoir une interprétation différente du code source, cela peut venir d'un composant qui a changé ou autre. C'est pourquoi, j'ai posté une demande d'aide en exposant cette procédure.
Après, j'ai l'autre souci de saisie, j'ai demandé d'abord ici puis sur le site xubuntu, et je suis toujours sans réponse.
Donc, il est logique de penser qu'il y a quelque chose qui coince sur cette machine, le tout est d'arriver à trouver la personne qui sera en mesure, sinon de trouver d'emblée la solution, du moins, de montrer la démarche à faire. Parce que, pour l'instant, la solution n'est pas cherchée au bon endroit.
Mais je suis bien conscient du problème qui n'est pas évident...
Patrick#11 Posté le 24/11/2016 à 17:37:14
Bonjour Foromus,
J’hésite un peu à poster car il y a peu de chance que ce soit ça, mais sait on jamais.
Je fais mes petits projets sur une machine équipée de ubuntu 14.04, j'ai un portable à coté avec ubuntu 16.04.
Lorsque je veux tester mes projets avec la version 16.04 je copie mon projet sur une clef usb et je l’exécute sur mon portable. Les erreurs remontées sont sur mes requêtes mysql (la dernière version étant moins permissive) et c'est la que la bizarrerie arrive, la modification du code source que j'apporte n’est pas prise en compte par l’interpréteur. Peut-être un petit exemple :
1
2
3
4
5
6
7
8
9
req="SELECT * FROM matable GROUP BY monchamp"
affiche(req)

PUBLIC SUB affiche(req AS STRING)

res=db.exec(req)


END


Fonctionne avec la 14.04 mais pas avec la 16.04, je suis obligé de changer * par monchamp dans la requête, ma ligne devient donc :
1
req="SELECT monchamp FROM matable GROUP BY monchamp"


Après modification je relance mon projet et la même erreur apparaît, en examinant ma variable req je me rend compte que mon * n'a pas été remplacée.
La même manip avec la version 14 fonctionne, j'en déduit donc qu'il existe peut-être des problèmes de communication entre les différentes versions ?
Et puis les problèmes de communication c'est la mal du siècle non ? ;)
Gambette#12 Posté le 24/11/2016 à 19:19:09
Bonsoir,
les requêtes sont les mêmes sur une 14.04 ou une 16.04
Si * n'a pas été remplacée, essayez de tout compiler avant de relancer le programme. Cela va mettre à jour le répertoire .gambas qui est utilisé lors de l'exécution du programme.
Foromus#13 Posté le 24/11/2016 à 20:29:12
Bonsoir,

Au passage, je dirais que j'ai aussi commencé par "tout recompiler". Ce n'était pas la solution...
Après, d'une machine à l'autre...
Quand même...
Mon portable dispose d'une CPU Intel double cœur, assez ancienne, et ça fonctionne.
Ma machine de bureau disposait, au départ, d'un AMD simple (plus ancien que l'Intel du portable), et j'ai eu les soucis. J'ai remplacé par un Intel double lui aussi, les soucis persistent.
Le composant commun des deux configurations reste la carte graphique. Là aussi, je me suis méfié d'emblée. J'ai tenté les versions ubuntu et les versions NVIDIA propriétaires, sans succès bien sûr. Surtout pour le souci de saisie ci-dessus mentionné.
Pour essais, j'ai fait un projet rudimentaire de saisie dans une textbox : toujours le même soucis.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
' Gambas class file


PUBLIC SUB Form_Open()

ME.Center

END

PUBLIC SUB cmdQuitter_Click()

ME.Close
QUIT

END

PUBLIC SUB cmdAfficher_Click()

TextLabel1.Text = TextBox1.Text

END


PUBLIC SUB TextBox1_KeyPress()


IF Key.Return = Key.Code OR Key.Enter = Key.code THEN
cmdAfficher.Visible = TRUE
Label2.Visible = TRUE
ENDIF

END


En fait, KeyPress n'est pas reconnu. En pas-à-pas, la valeur s'affiche bien dans la TextBox1.Text lors de la saisie, mais n'est pas récupérable.
Bon, je sais, je mélange deux choses, mais je suis intimement persuadé que c'est le même problème. Mais en réalité, je n'en sais rien...
Flachy Joe#14 Posté le 24/11/2016 à 22:03:35
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
serait-il possible qu'il y ait un souci avec un des paquets d'installation de gambas de la distribution *buntu 16.04 ? (tu confirmes que c'est ce que tu utilises foromus ?)

Il faudrait investiguer...
;) Flachy Joe ;)
linuxos#15 Posté le 24/11/2016 à 23:30:56
Un peu de sel, de poivre et la crevette sera... Bonjour Foromus,

J'ai déjà eu par le passé de mésaventures avec les paquets Gambas venant d'Ubuntu. Ils n'ont pas vraiment fait l'effort de bien packager d'ou je te recommande d'utiliser les paquets venant de ce site car ils sont vraiment fiables.
De plus tu pourras soit avoir la dernière version stable soit régulièrement la dernière version SVN de Gambas, ce qui est vraiment cool dans mon cas.

Installation de Gambas a partir des PPA:

Pour la dernière version de développement SVN, utiliser le PPA construction journalière:
sudo add-apt-repository ppa:gambas-team/gambas-daily
sudo apt-get update
sudo apt-get install gambas3


Pour la dernière version Stable de Gambas, utiliser le PPA suivant

sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3


Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
12