Gambas France BETA


Pas de compte ? Incription

Comment voir si un media externe est connecté ?

Ce sujet est résolu.

12
AuteurMessages
Foromus#1 Posté le 14/8/2014 à 09:08:26
Bonjour,

A première vue, ça peut peut-être surprendre...
Comme je suis en train de faire un petit programme de sauvegarde, j'aimerais pouvoir afficher à l'utilisateur le fait qu'il ait un média de connecté ou non.
Naturellement, j'ai pensé à la formule : If exist(/media/...) Then ceci ou cela, mais le problème, c'est que dans ce répertoire, j'ai toujours deux sous-répertoire indélogeables qui sont Floppy et Floppy0. Et par ailleurs, si je branche un média pour la première fois, je ne sais pas qui il sera.
Donc, mon souhait se résume à ceci :
1) Si mon appli n'a jamais eu à enregistrer un média externe dédié, elle doit me signaler que :
Aucun média externe n'est connecté ni monté, ou,
Le média machin est connecté et monté.
2) Si mon appli a déjà enregistré un média externe dédié, elle doit me signaler que le média est présent, monté ou absent.
Si il est monté, elle devra aussi dire si le media présent est différent de celui référencé.

Pour le 2), je pense que je pourrais trouver en cherchant un peu, ça me semble accessible.
Pour le 1), je ne vois pas trop, à moins de faire un listing du répertoire /media, d'éliminer les floppy embarrassants et voir si il reste quelque chose. Là, je ne sais pas trop faire, et du reste, même si je n'exporterai jamais mon appli (trop simple !), je dois partir du principe que sur un autre machine, les floppy ne seront peut-être pas là...

Voilà, j'espère avoir été clair....
Jack#2 Posté le 14/8/2014 à 11:56:19
Pour la sauvegarde tu peux passer par un dirchooser que tu initialiseras avec la commande suivante :
Dialog.Path = "/media"
Bien sur le media devra être monté avant l'activation du dirchooser.
Pour un code démocratique nationalisons Gambas.
Reivillo#3 Posté le 15/8/2014 à 13:09:07
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonjour Foromus.

Toujours dans du Gambash,
on peut voir peut-être avec celà...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PUBLIC SUB Button1_Click()

DIM $sDF AS STRING
DIM $aDF AS String[]
DIM $iDF AS INTEGER

SHELL "df | grep '^/' | tr -s ' '" TO $sDF
$sDF = Replace$($sDF, "\n", " ")
$aDF = Split($sDF, " ")
FOR $iDF = 0 TO $aDF.Max STEP 6
TRY PRINT $aDF[$iDF] & Chr$(9) & $aDF[$iDF + 5]
NEXT

END
Reivillo.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Foromus#4 Posté le 15/8/2014 à 19:35:10
Bonjour à tous,

Finalement, je m'en suis sorti assez simplement.
Partant du principe que le premier pointage doit obligatoirement être /media, j'enregistre tout simplement le chemin (que je dois utiliser après), et je contrôle que left$(chemin,6) = "/media", et si ce n'est pas le cas, je bloque...
A première vue, ça marche...

Merci pour les suggestions, à retenir pour d'autres circonstances, peut-être...
Foromus#5 Posté le 17/8/2014 à 11:43:29
Bonjour à tous,

A propos du media externe :
Un blocage tout à fait normal au cours de la copie (mais je ne l'ai pas fait exprès...)
Quand le media est trop petit pour recevoir la source, il y a problème.
Dans ce cas, comment je m'en tire ?
Je n'ai pas la possibilité - dans mon cas - de mesurer le volume de la source car je n'ai, en mémoire, que les chemins, et encore, que ceux de départ (donc, pas les sous-répertoires).
A moins que Gambas - qui me surprend toujours par ses richesses que je découvre au fur et à mesure, ne dispose d'une commande particulière qui indique le volume, un peu comme sous Linux, avec le choix "Propriétés", et qui donne, et le volume occupé, et le volume restant libre, que ce soit pour un répertoire ou un volume quelconque. Avec un tel outil, il serait alors très simple de faire une mesure avant copie, et de bloquer celle-ci si la chose risque de déborder.

Qu'en pensez-vous ?...

En annexe et hors sujet :
Comment je bloque un volet d'un TabStrip, si ce qu'il contient n'a pas à être sollicité quand cela est fait à mauvais escient ?

Merci !
vuott#6 Posté le 17/8/2014 à 14:37:29
Ne cedere ineluctabili possimus
Voilà, j'espère avoir été clair....



Only Gambas functions...... :|

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PUBLIC SUB Main()

DIM s AS STRING
DIM ss1, ss2 AS NEW String[]
DIM j AS BYTE

s = File.Load("/proc/self/mounts")

ss1 = Split(s, "\n")

FOR j = 0 TO ss1.Max
IF InStr(ss1[j], "/dev/s") > 0 THEN
ss2 = Split(ss1[j], " ")
PRINT ss2[0], ss2[1]
ENDIF
NEXT

END
« Vita non suavis esse potest, nec Mors amara. »
Jack#7 Posté le 17/8/2014 à 16:37:11
Comment je bloque un volet d'un TabStrip, si ce qu'il contient n'a pas à être sollicité quand cela est fait à mauvais escient ?


En faisant un contrôle sur l'index du tabstrip ? (sur le numero 2 par exemple)

1
2
3
4
5
6
7
8
9
10
11
PUBLIC SUB Tabstrip_click()
IF mauvaisescient THEN
IF TabStrip.index = 2 THEN
TabStrip.enabled = FALSE
ELSE
TabStrip.enabled = TRUE
ENDIF
ELSE
TabStrip.enabled = TRUE
ENDIF
END
Pour un code démocratique nationalisons Gambas.
Foromus#8 Posté le 18/8/2014 à 08:40:10
Pour la sauvegarde tu peux passer par un dirchooser que tu initialiseras avec la commande suivante :
Dialog.Path = "/media"
Bien sur le media devra être monté avant l'activation du dirchooser.


Bonjour,

J'ai un peu tourné la formule dans tous les sens, je ne suis arrivé à aucun résultat intéressant, si ce n'est un refus de code...
Sachant que dans mon formulaire, j'ai deux chooser (1 & 2), que je ne veux traiter ici que le second, ma formule "Dialog.Path = "/media" ", je la mets où ?...

Merci !
Jack#9 Posté le 18/8/2014 à 18:15:23
Ok, je m'exprime mal et je suis hors sujet :pale: donc je reprend à zéro.

pour selectionner une directory ou un fichier le plus simple c'est de passer par une classe nommée Dialog
http://gambasdoc.org/help/comp/gb.form.dialog/dialog?fr
Voilà comment se servir de cette classe qui t'affranchi du dirchooser.

Soit deux textbox et deux boutons dans ta form : Le premier va te servir pour sélectionner un répertoire et le second pour sélectionner un fichier texte. A toi d'adapter la fonction filefilter en fonction de tes besoins concernant le type de fichiers a sélectionner.
NB : Tu peux mettre plusieurs types de fichiers bien sur.

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
PUBLIC SUB Button1_Click()

Dialog.Title = "Choisir un repertoire"
Dialog.Path = User.home & "/Bureau"
IF NOT Dialog.SelectDirectory() THEN
TextBox1.Text = Dialog.Path
ELSE
TextBox1.Text = User.Home
ENDIF

END

PUBLIC SUB Button2_Click()

Dialog.Title = "Choisir un Fichier"
Dialog.Filter = FileFilter(TRUE)
Dialog.Path = User.home & "/Bureau"
IF Dialog.OpenFile() THEN RETURN
TextBox2.Text = Dialog.Path

END

PRIVATE FUNCTION FileFilter(OPTIONAL All AS BOOLEAN = FALSE) AS String[]

DIM filter AS NEW String[]

filter.Add("*.txt")
filter.Add("Text Files")
RETURN filter

END
Pour un code démocratique nationalisons Gambas.
Reivillo#10 Posté le 19/8/2014 à 11:29:28
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonjour.

@ Jack.
Pourquoi as-tu créé une Function FileFilter()
la ligne 16
1
Dialog.Filter = FileFilter(TRUE)
peut être, remplacée anantagement,
par
1
Dialog.Filter = [".txt", "Text Files"]
Ce qui rend la Function FileFilter() superflue. Non ?
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Jack#11 Posté le 19/8/2014 à 12:33:37
Tu as complètement raison mais j'aime bien faire mumuse avec le code.
Pour un code démocratique nationalisons Gambas.
Foromus#12 Posté le 19/8/2014 à 13:38:43
Moi je dis que c'est bien.
Jack#13 Posté le 19/8/2014 à 14:23:20
Je déconnais un peu, :geek: malgré tout, l'intérêt réside dans une application aux multiples appels.
Pour un code démocratique nationalisons Gambas.
Reivillo#14 Posté le 19/8/2014 à 15:02:25
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »
Je déconnais un peu, :geek: malgré tout, l'intérêt réside dans une application aux multiples appels.

Alors là! J'aurai du m'abstenir de faire cette remarque...Sorry
Sur ce, Je retourne m'occuper de mes Oignons.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Foromus#15 Posté le 19/8/2014 à 21:07:14
Bonjour à tous,

Voilà, je pense être arrivé au but recherché.

Merci à tous pour votre aide fort précieuse !
12