# Cibler un volume dans Real Studio



## BBFUNK01 (7 Décembre 2010)

Hello,

Je suis toujours dans mon apprentissage de real Studio, j'ai donc développé une petite application qui fonctionne bien à un détail près : je dois copier des fichiers d'un répertoire à un autre, ce répertoire est situé sur un volume réseau et je ne parviens pas à cibler ce volume en question.
pour atteindre ce dernier j'ai essayé ceci :

SpecialFolder.Desktop.Child("le_volume")

mais j'obtiens alors une erreur :
"An exception of class NilObjectException was not handled. The application must shut down."

je suppose que le problème vient du chemin que je définis pour atteindre "le_volume".
Auriez-vous une idée ?

Merci,

BBFUNK01


----------



## CathyGYM (7 Décembre 2010)

BBFUNK01 a dit:


> Hello,
> 
> Je suis toujours dans mon apprentissage de real Studio, j'ai donc développé une petite application qui fonctionne bien à un détail près : je dois copier des fichiers d'un répertoire à un autre, ce répertoire est situé sur un volume réseau et je ne parviens pas à cibler ce volume en question.
> pour atteindre ce dernier j'ai essayé ceci :
> ...



As tu essayé de faire ceci ?

NomVolume= new FolderItem
NomVolume.name=SpecialFolder.Desktop.Child("le_volume")


----------



## Anonyme (7 Décembre 2010)

Bonjour,

C'est comme ceci

```
Dim the_Volume as New FolderItem("le_volume:",FolderItem.PathTypeAbsolute)
```
*Important* le : doit être toujours après le nom du volume pour un absolute path


----------



## BBFUNK01 (7 Décembre 2010)

Re,

désolé pour la réponse tardive.

CathyGYM -> non je n'ai pas essayé ton code :

NomVolume= new FolderItem
NomVolume.name=SpecialFolder.Desktop.Child("le_volume")

Mais à priori je pense que ce doit être sensiblement la même chose que le code que j'ai utilisé avec comme différence le fait que tu déclares en variable le volume en question au préalable.

Mac_Jac -> Donc si je pige bien c'est ce code :

Dim the_Volume as New FolderItem("le_volume:",FolderItem.PathTypeAbsolute)

...qu'il faut que j'utilise pour cibler le volume, mais ce code permet de déclarer le volume ou alors c'est comme ceci que je peux "entrer" dans le volume pour enregistrer des fichiers dans un dossier contenu dans le volume ? Comme je le comprends c'est la déclaration du volume, donc ensuite il faudrait que j'écrive un truc comme ça pour cibler un dossier :

Dim the_Volume as New FolderItem("le_volume:",FolderItem.PathTypeAbsolute)
the_Volume.Child("dossier1").Child("sous_dossier1").Child("sous_dossier2)

Est-ce que j'ai bien compris le truc ?

Pour le verdict ce sera demain car là je suis chez moi et le fameux volume... A mon boulot .

BBFUNK01

---------- Nouveau message ajouté à 19h30 ---------- Le message précédent a été envoyé à 19h30 ----------

Et merci à vous deux pour vos réponses .

BBFUNK01


----------



## Anonyme (8 Décembre 2010)

BBFUNK01 a dit:


> Comme je le comprends c'est la déclaration du volume, donc ensuite il faudrait que j'écrive un truc comme ça pour cibler un dossier :
> 
> Dim the_Volume as New FolderItem("le_volume:",FolderItem.PathTypeAbsolute)
> the_Volume.Child("dossier1").Child("sous_dossier1").Child("sous_dossier2)
> ...


Oui, tu as bien compris.

Mais,_ pour ne pas  planter l'application en cas d'erreur_ :
Il faut toujours vérifier que le volume est monté, sauf si c'est le volume de démarrage.

```
Dim the_Volume as FolderItem
  Try
    the_Volume= New FolderItem("le_volume:", FolderItem.PathTypeAbsolute)
  Catch err as UnsupportedFormatException
    MsgBox "Le volume 'le_volume' n'est pas monté ou n'existe pas"
    return //le reste du code ne sera pas executé
  End Try
```

Pour un sous-dossier (*Child*), il faut vérifier avec la propriété *Exists* du Folderitem.
Donc, chaque Child est à vérifier , sauf  le dernier Child s'il faut le créer.


----------



## BBFUNK01 (8 Décembre 2010)

Hello,

Mes respects Mac_Jac , ton code marche à merveille ! Je n'ai pas encore testé celui de ton dernier message mais je l'ajouterai dans l'appli dès cet après-midi. Question subsidiaire Mac_Jac : ça fait combien de temps que tu fais du Real Basic ? Car à chaque problème que j'ai soumis tu as répondu et fais mouche de suite, et pour l'anecdote j'ai posé la question sur un autre forum pour mon histoire de volume et les réponses que j'ai obtenu n'ont pas fonctionné... Donc j'ai comme l'impression que tu maîtrises bien ton sujet .

Un grand merci à toi en tout cas .

BBFUNK01


----------



## Anonyme (8 Décembre 2010)

Bonjour,



BBFUNK01 a dit:


> Question subsidiaire Mac_Jac : ça fait combien de temps que tu fais du Real Basic ?
> Car à chaque problème que j'ai soumis tu as répondu et fais mouche de suite,


J'en ai fait environ quatre ans, mais  à partir de 2006, j'utilise *Xcode* si j'ai besoin d'une interface graphique, sinon j'utilise AppleScript ou des scripts shell.
J'ai renouvelé *Real Studio* en 2009 en cas de mise à jour de mes vieilles applications Realbasic.
Ma version actuelle est *2010.2.1.0*




BBFUNK01 a dit:


> et pour l'anecdote j'ai posé la question sur un autre forum pour mon histoire de volume et les réponses que j'ai obtenu n'ont pas fonctionné...


Il existe différentes solutions pour obtenir ce que tu demandes, 
mais les problèmes, c'est que leurs solutions exigent certaines connaissances, car (les explications et le bout de code en exemple (souvent selon leurs mémoires) ne sont pas toujours compréhensibles par un débutant.

Par exemple ce bout de code :

```
Dim leFich as Folderitem
LeFich = GetFolderItem("Unix/Volumes/nom-de-ton-disque-dur", folderitem.shellpath)
```
Pour les connaisseurs d'Unix, il sait comment écrire le chemin.
Le chemin des volumes autres que le démarrage  commence toujours par */Volumes/*_et le nom du volume_/

Le chemin du volume de démarrage est seulement la barre oblique / (sans le nom du volume)
Donc, *Unix* était là pour indiquer le type de chemin.

*folderitem.shellpath* est écrit de mémoire. mais c'est  ce code 
	
	



```
FolderItem.PathTypeShell
```

Donc, quand j'écris une réponse, j'essaie toujours d'être précis dans mes explications et dans mon exemple de code.

Si tu veux utiliser *GetFolderItem*:
 il ne donnera jamais d'erreur, il faut vérifier avec *Exists* comme ceci.

```
Dim the_Volume as Folderitem
  the_Volume = GetFolderItem("/Volumes/le_volume", FolderItem.PathTypeShell)
  if the_Volume.Exists then
    // le volume est monté
    
  else
    MsgBox "Le volume 'le_volume' n'est pas monté ou n'existe pas"
  end if
```


----------



## BBFUNK01 (9 Décembre 2010)

Hello mac_jac,

merci pour toutes ces explications complémentaires . Une petite question d'ordre "pratique", à mon travail on envisageait éventuellement de se tourner vers Xcode pour la création de nos applications, mais il semblerait que Xcode soit beaucoup plus délicat à "apprivoiser" que Real Studio, est-ce ton avis aussi ?

A plus ,

BBFUNK01


----------



## Anonyme (9 Décembre 2010)

Bonjour,



BBFUNK01 a dit:


> à mon travail on envisageait éventuellement de se tourner vers Xcode pour la création de nos applications, mais il semblerait que Xcode soit beaucoup plus délicat à "apprivoiser" que Real Studio, est-ce ton avis aussi ?


J'ai lu ta discussion sur macfr,  je n'ai  vraiment rien de plus à ajouter.


----------



## BBFUNK01 (10 Décembre 2010)

Hello,

bon de toute manière j'ai conclu que Real Studio serait plus "abordable" techniquement pour moi et mes collègues (d'autant plus que personne au sein de mon équipe n'a jamais fait de prog hormis moi et une collègue, donc Xcode...).
Bref, le fait que tu aies lu ma discussion sur macfr m'amène à te poser cette question :
est-il "simple" de faire communiquer une application créée avec Real Studio avec une autre application ? Dans le détail voici ce que j'envisagerai : l'aide que tu m'as fournie m'a permis de générer des fichiers textes et de copier des fichiers pdf dans un dossier afin de "sauter des étapes" au niveau de la création/gestion de fichiers de flashage, ce qui me permet donc d'obtenir mes fichiers à flasher simplement en remplissant des champs textes dans l'application créée avec real Studio. j'aimerai aller plus loin en propageant les fichiers textes générés dans l'application qui flashe les fichiers, du genre indiquer qu'une fois les fichiers textes générés, ceux-ci sont automatiquement envoyés vers le rip dans tel flux pour être flashés.
Je présume qu'il y a un "chemin" différent à déclarer pour solliciter l'application de flashage, et également une méthode pour lancer l'application si celle-ci n'est pas en activité ?

BBFUNK01


----------



## Anonyme (10 Décembre 2010)

BBFUNK01 a dit:


> est-il "simple" de faire communiquer une application créée avec Real Studio avec une autre application ?
> j'aimerai aller plus loin en propageant les fichiers textes générés dans l'application qui flashe les fichiers, du genre indiquer qu'une fois les fichiers textes générés, ceux-ci sont automatiquement envoyés vers le rip dans tel flux pour être flashés.
> Je présume qu'il y a un "chemin" différent à déclarer pour solliciter l'application de flashage, et également une méthode pour lancer l'application si celle-ci n'est pas en activité ?
> 
> BBFUNK01


On peut piloter l'application (si elle est scriptable) en *AppleScript*, le nom de l'application suffit (aucun besoin de connaître l'emplacement de l'application).
C'est très simple d'utiliser un script AppleScript qu'on insère dans un projet Real Studio.

Quel est le nom de cette application de flashage ?
Pour voir si elle est scriptable, glisse son icône sur l'application "*Éditeur AppleScript*".

Sinon si elle accepte des lignes de commande (shell), c'est aussi très simple de l'utiliser dabs Real Studio


----------



## BBFUNK01 (10 Décembre 2010)

Hello Mac_Jac,

du coup le problème est résolu : avec une collègue nous avons ce matin édité un flux Nexus (Nexus est une application Esko Artworks), donc de mon côté il faut que je retravaille mon application de manière à générer un dossier qui sera nommé en fonction des 4 champs textes qui sont à remplir, puis simplement générer 2 fichiers textes à l'intérieur de ce dossier. Et au final il faut que j'enregistre ce dossier et son contenu dans un hotfolder situé sur un volume, et c'est ça que le flux prend le relais en créant les fichiers de flashage, puis n les flashant automatiquement.
Bref, mission accomplie (en grande partie grâce à toi pour l'appli Real Studio ).

Néanmoins je vais faire des essais en créant des applis qui communiquent avec d'autres applis pour jauger l'étendue des possibilités, par exemple ouvrir un fichier.pdf, convertir des fichiers... ce genre de choses quoi.
Pour répondre à ta question l'application de flashage se nomme "Shuttle", c'est une sorte de rip où l'on drag and drop les fichiers qu'on souhaite flasher, ensuite l'application qui gère les flux se nomme "Nexus", "Shuttle" n'étant qu'une "passerelle" des fichiers vers "Nexus", en fait "Shuttle" se résume à être une fenêtre où l'on sélectionne le hotfolder du flux souhaité  après avoir drag and dropé les fichiers.
Quand tu parles d'insérer un script AppleScript dans un projet Real Studio tu veux dire qu'il faut importer le script AppleScript dans le projet tel qu'on importerait une image ? Ou alors il faut insérer le script dans l'éditeur de script de real Studio ?

BBFUNK01

---------- Nouveau message ajouté à 12h03 ---------- Le message précédent a été envoyé à 11h56 ----------

Une dernière question si je puis me permettre :
Je présume que dans Real Studio comme dans tous les softs de programmation il est possible d'utiliser des tableaux (on dit "array" aussi dans real Studio ?), et qu'à priori on peut trier des tableaux en passant par exemple par une boucle ?
Car je me dis que j'améliorerai bien l'appli en automatisant de A à Z les tâches, en gros on a une base de données sous forme de fichier excel et l'idée serait de "lire" cette base avec l'appli, de trier les données suivant les différents paramètres, de les réordonner après le tri, puis de les flasher ensuite.
Dans l'hypothèse ça te semble jouable (lire le fichier excel j'entends, je me doute qu'il y une gestion des arrays et des boucles dans Real Studio) ?

BBFUNK01


----------



## Anonyme (11 Décembre 2010)

Hello BBFUNK01,



BBFUNK01 a dit:


> Quand tu parles d'insérer un script AppleScript dans un projet Real Studio tu veux dire qu'il faut importer le script AppleScript dans le projet tel qu'on importerait une image ?


Oui, c'est exactement comme une image.

Je n'ai pas le temps en ce moment pour répondre à ta deuxième question, mais je le ferais probablement dimanche.


----------



## CathyGYM (11 Décembre 2010)

BBFUNK01 a dit:


> Quand tu parles d'insérer un script AppleScript dans un projet Real Studio tu veux dire qu'il faut importer le script AppleScript dans le projet tel qu'on importerait une image ? Ou alors il faut insérer le script dans l'éditeur de script de real Studio ?
> BBFUNK01



Si je peux me permettre de compléter le message de Maître Mac_Jac, tu fais passer le script dans ton projet Real Studio (glisser déposer). Le script apparait alors dans la fenêtre projet dans les "Build Automation". Attention, il est très important que le script soit enregistré en tant que script (et non application comme on pourrait le penser). On peut par contre continuer à le faire évoluer à partir d'applescript (le programme importé n'est pas figé), et même si on le change de nom real studio change le nom également...
L'appel à partir de visual studio se fait sans call ni run, mais juste avec le nom de script ; c'est un peu déroutant car contrairement aux variables déclarées dans visual studio, il ne nous est pas proposé lorsque l'on frappe les premières lettres.
Enfin, il est également possible de lui faire passer des arguments, mais dans ce cas il faut déclarer les variables au début du script, exemple de code :

dans le script :

```
on run (MaVariable1Arg, MaVariable2Arg)
set MaVariable1 to MaVariable1Arg as string
set MaVariable2 to MaVariable2Arg as string
display dialog "Les deux arguments sont " & MaVariable1 & " et " & MaVariable2
end run
```

Appel de real studio :

```
Dim Var1 as String
Dim Var2 as String
Var1="Variable 1"
Var2="Variable 2"
Mon_Script(Var1,Var2)
```

Enfin, il faut tester le script isolément avant de l'exécuter à partir de Real Studio car si çà plante on ne sait pas où... il ne se passe rien. Le manque de débuguer sur AS nécessite d'ailleurs souvent de faire des affichages, car je trouve perso que les messages d'erreur ne sont pas toujours très explicites.

Concernant les variables "tableaux", je les ai assez peu utilisées mais ce que je peux te dire, c'est qu'ils se déclarent comme les variables simples. A ma connaissance, les index partent de 0 et je ne sait pas si on peut les faire partir de 1 :

```
Dim Tableau1(20) as string
Dim Tableau2(20,5) as integer
For i=0 to 20
   Tableau1(i)="Essai"+str(i)
   For j=0 to 5
      Tableau2(i,j)=i*j
   Next j
Next i
```

Enfin, concernant l'utilisation d'excel, j'attire ton attention sur le fait que les objets ExcelApplication ne sont utilisables que sous Windows. Tu peux par contre lire des tableaux "Numbers" à partir d'applescript.

Bon courage pour ton projet


----------



## BBFUNK01 (11 Décembre 2010)

Hello,

Mac_Jac et cathyGM -> encore une fois merci infiniment à vous deux pour tous vos éclaircissements .
Concernant la lecture d'un fichier excel ce n'est qu'une hypothèse envisagée pour améliorer au paroxysme le minimum d'actions et de manipulations à effectuer, et il est encore trop tôt pour dire si cela se fera (je ne suis pas le seul à intervenir dans cette mise en place donc ça n'est pas de mon seul ressort).
Autrement à l'heure où je rédige cette réponse j'avais une autre question potentielle à poser, mais comme je viens à l'instant de trouver la réponse et bien je ne vais pas la poser .
C'était simplement créer un fichier.texte sans boîte de dialogue, fichier.texte à créer à l'intérieur du dossier fraîchement créé, voici le code pour ceux que ça intéresse :


```
//création du dossier :
  Dim DEST, newFolder as FolderItem
  DEST = SpecialFolder.Desktop.child("volume").child("sous_volume").child("flux")
  newFolder = DEST.child(DOS)
  newFolder.createAsFolder
  

//création du fichier.texte :
  Dim fich1 as FolderItem
  Dim stream as TextOutputStream
  fich1 = DEST.child(DOS).child(Art1 + "-amalgame" + ".fea")
  If fich1 <> Nil then
    stream=TextOutputStream.Create(fich1)
    fich1.MacCreator="ttxt"
    Stream.WriteLine ("ArtPro Grid Layout File V1.0")
    Stream.WriteLine (Art1 + ".pdf," +  Art2 + ".pdf," + Art3 + ".pdf," + Art4 + ".pdf")
    Stream.WriteLine (Art1 + ".pdf," +  Art2 + ".pdf," + Art3 + ".pdf," + Art4 + ".pdf")
    Stream.Close
  End if
```

A plus ,

BBFUNK01

---------- Nouveau message ajouté à 20h38 ---------- Le message précédent a été envoyé à 20h18 ----------

Re,

je cherche tout de même comment faire une zone de texte "info" dans mon appli, un champ texte qui afficherait une sorte de statut, par exemple : "erreur", ou "opération réussie". Un équivalent du champ de texte dynamique dans Flash, soit un champ de texte non sélectionnable et non éditable. Est-ce possible dans Real Studio ou suis-je obligé d'utiliser une TextField ?

Merci ,

BBFUNK01


----------



## CathyGYM (11 Décembre 2010)

BBFUNK01 a dit:


> je cherche tout de même comment faire une zone de texte "info" dans mon appli, un champ texte qui afficherait une sorte de statut, par exemple : "erreur", ou "opération réussie". Un équivalent du champ de texte dynamique dans Flash, soit un champ de texte non sélectionnable et non éditable. Est-ce possible dans Real Studio ou suis-je obligé d'utiliser une TextField ?



Pour faire une zone de texte non sélectionnable et non éditable sur Real Studio, tu as le choix entre un textfield avec la propriété enabled décochée, soit, plutôt un Label, qui peut également être modifié de façon dynamique...

```
Label1.text="erreur"    '---  (ou "opération réussie")

TextField1.text="erreur"
TextField1.enabled=false
```
Tu pourras même lui changer la couleur de façon dynamique (pour faire ressortir l'erreur par exemple) avec la propriété .textcolor (et même .backcolor pour les textfield)... après le choix c'est plus une question de design si tu as juste un texte à écrire dedans...


----------



## BBFUNK01 (12 Décembre 2010)

Merci beaucoup CathyGYM, ça marche nickel .

A plus ,

BBFUNK01

---------- Nouveau message ajouté à 13h15 ---------- Le message précédent a été envoyé à 11h59 ----------

Hello,

je me heurte à un nouveau "petit" problème d'ordre graphique cette fois-ci, j'effectue un contrôle sur les champs entrés dans l'appli, et par conséquent si les champs sont ok un message "ok" s'affiche, si ce n'est pas ok un message "erreur" s'affiche. Lorsque le message s'affiche le focus est sur le champ texte TextField4, j'aimerais donc que lorsque l'on met le curseur de la souris sur le TextField1 le champ texte d'erreur se réinitialise à "". Je me doute qu'il y a une histoire de SetFocus ou GotFocus mais je n'ai pas encore trouvé la solution. Avez-vous des suggestions ?

Merci ,

BBFUNK01


----------



## BBFUNK01 (12 Décembre 2010)

Raahhh...
Décidément je sèche encore sur un truc : écrire dans un fichier.texte existant et ce en ajoutant le nouveau texte à la ligne suivante, j'ai donc écrit ce code :


```
Dim FLASHAGE as FolderItem
    Dim stream3 as TextOutputStream
    FLASHAGE = SAVE.child("FLASHAGE du " + DATE).child("Flashage amalgames du " + DATE)
    If FLASHAGE <> Nil then
      stream3 = TextOutputStream.Create(FLASHAGE)
      FLASHAGE.MacCreator="ttxt"
      Stream3.WriteLine (Archive)
      Stream3.Close
    elseif FLASHAGE.Exists = true then
      Stream3.Write (Archive)
      Stream3.Close
    End if
```

J'ai donc regardé dans le manuel et ai fait des tests avec append et Delimiter :


```
elseif FLASHAGE.Exists = true then
      Stream3.append(FLASHAGE)
      Stream3.Write (Archive)
      Stream3.Close
    End if
```

et :


```
elseif FLASHAGE.Exists = true then
      \n = TextOutputStream.Delimiter
      Stream3.Write (\n + Archive)
      Stream3.Close
    End if
```

Mais sans succès... Comment donc écrire dans un fichier.texte ayant déjà un contenu, et ce sans écraser ce contenu ?

Merci ,

BBFUNK01


----------



## CathyGYM (12 Décembre 2010)

> je me heurte à un nouveau "petit" problème d'ordre graphique cette fois-ci, j'effectue un contrôle sur les champs entrés dans l'appli, et par conséquent si les champs sont ok un message "ok" s'affiche, si ce n'est pas ok un message "erreur" s'affiche. Lorsque le message s'affiche le focus est sur le champ texte TextField4, j'aimerais donc que lorsque l'on met le curseur de la souris sur le TextField1 le champ texte d'erreur se réinitialise à "". Je me doute qu'il y a une histoire de SetFocus ou GotFocus mais je n'ai pas encore trouvé la solution. Avez-vous des suggestions ?
> BBFUNK01



Pour celà, tu programmes l'évènement gotfocus du textfield1, pour çà tu regardes sur la partie gauche de ton projet tu as la liste des controles disponibles sur ta feuille, tu choisis textfield1, puis l'évènement gotfocus, et dans la partie programme, tu fais la remise à "" de la zone de texte qui contient les message d'erreur (textfield4 je crois)...

```
textfield4.text=""
```

Je regarde ton message suivant, et je vois si je peux y répondre...

---------- Nouveau message ajouté à 18h43 ---------- Le message précédent a été envoyé à 18h24 ----------




> Décidément je sèche encore sur un truc : écrire dans un fichier.texte existant et ce en ajoutant le nouveau texte à la ligne suivante...


J'ai eu un problème similaire récemment, et je l'ai contourné en passant par un fichier temporaire. Pas très propre, mais çà avait marché, en copiant le fichier existant dans un fichier. Puis j'avais recopié toutes les lignes. Ca donne un truc comme çà :



```
dim fFic as FolderItem
  dim fFicTemp as FolderItem
  dim FichierAEcrire as TextOutputStream
  dim FichierALire as TextInputStream
  '--- Déclaration de tes folderitems
  '--- Donner un path aux 2 fichiers 
  if fFic.exists then
     fFic.CopyFileTo (fFicTemp)
     FichierALire=TextInputStream.open(fFicTemp)
     FichierAEcrire=TextOutputStream.open(fFic)
     while not FichierALire.EOF
          ligne = FichierALire.ReadLine
          FichierAEcrire.writeline ligne
     wend
     FichierALire.close
     fFicTemp.delete
   else
     FichierAEcrire=TextOutputStream.Create(fFic)
   end if
   FichierAEcrire.writeLine LigneSuivante
```


Mais je pense qu'il doit y avoir mieux... (je débute aussi !)  
Bon courage...


----------



## BBFUNK01 (12 Décembre 2010)

Re CathyGYM,

Ah ! Pour le coup du gotFocus en fait c'était simple comme bonjour ! Je n'avais pas encore mis le nez dans les différentes propriétés des contrôles... Merci beaucoup .
Pour ce qui est d'écrire dans le fichier.texte qui possède déjà un contenu je vais chercher pour trouver la solution adéquate, car je t'avoue que même si ta solution fonctionne comme tu le dis ce n'est "pas très propre".

A plus ,

BBFUNK01


----------



## Anonyme (12 Décembre 2010)

BBFUNK01 a dit:


> Raahhh...
> Décidément je sèche encore sur un truc : écrire dans un fichier.texte existant et ce en ajoutant le nouveau texte à la ligne suivante, j'ai donc écrit ce code :
> 
> 
> ...


Bonjour,

Le problème est que FLASHAGE n'est pas nil même s'il n'existe pas.
Il sera nil que si un des child  avant le dernier child n'existe pas, c'est logique pour qu'on puisse créér  le dernier child ( un dossier ou un fichier)

Le code sera comme ceci.

```
Dim stream3 as TextOutputStream
  FLASHAGE = SAVE.child("FLASHAGE du " + DATE).child("Flashage amalgames du " + DATE)
  
  If FLASHAGE = Nil then // le dossier "FLASHAGE du " + DATE n'existe pas
    SAVE.child("FLASHAGE du " + DATE).createAsFolder // création du dossier
    FLASHAGE = SAVE.child("FLASHAGE du " + DATE).child("Flashage amalgames du " + DATE)
  End if
  if not FLASHAGE.Exists then  // le fichier n"existe pas
    stream3 = TextOutputStream.Create(FLASHAGE)
    FLASHAGE.MacCreator="ttxt"
  else  // le fichier existe
    stream3 = TextOutputStream.append(FLASHAGE)
  End if
  Stream3.Write (Archive)
  Stream3.Close
```


----------



## CathyGYM (12 Décembre 2010)

> Pour ce qui est d'écrire dans le fichier.texte qui possède déjà un contenu je vais chercher pour trouver la solution adéquate, car je t'avoue que même si ta solution fonctionne comme tu le dis ce n'est "pas très propre".


Si tu trouves, çà pourra m'interesser... 
A+


----------



## BBFUNK01 (12 Décembre 2010)

Re,

Mac_Jac -> encore une fois tu apportes la solution au problème .
Néanmoins pour effectuer un retour à ligne à chaque incrémentation dans le fichier.texte, penses-tu qu'il faille utiliser TextOutpoutStream.Delimiter ?

Encore merci 

CathyGym -> Et bien je n'ai pas eu le temps de trouver car Mac_Jac a donné la solution avant .

A plus ,

BBFUNK01


----------



## Anonyme (12 Décembre 2010)

BBFUNK01 a dit:


> Néanmoins pour effectuer un retour à ligne à chaque incrémentation dans le fichier.texte, penses-tu qu'il faille utiliser TextOutpoutStream.Delimiter ?



Pour avoir toujours une fin de ligne à la fin du texte à chaque fois qu'on écrit dans le fichier, il faut utiliser *WriteLine* au lieu de *Write*.

*Delimiter* est pour modifier la fin de ligne lors de l'écriture avec  *WriteLine*, les types sont (Windows, Macintosh et Unix),   c'est Macintosh par défaut.
Exemple pour avoir une fin de ligne Unix

```
stream3.Delimiter = EndOfLine.Unix
Stream3.WriteLine (Archive)
```


----------



## CathyGYM (12 Décembre 2010)

Bien vu le .append, comment n'y a-t-on pas pensé avant !!!
Merci


----------



## BBFUNK01 (12 Décembre 2010)

Mac_Jac tu es un prince !

Bon et bien en tout cas grâce à ce dernier coup de pouce de ta part mon application est dorénavant terminée . L'application est fonctionnelle et en grande grande grande partie grâce à toi donc mille merci , et à charge de revanche .

A plus ,

BBFUNK01


----------



## magister (22 Février 2011)

Lorsque je compile en real studio une appli avec une connexion Mysql, la génération pour PC se fait bien et celle pour Mac plante avec le message "erreur fatale".
J'ai exactement le même problème en compilant à partir d'un macbook pro.
(real studio version 5)

Merci.


----------



## CathyGYM (22 Février 2011)

D'après le help, il faut installer le plug-in MySQL :


> In order to use this class, you must install the MySQLCommunityPlugin database plug-in in your plugins folder. This class connects to the MySQL Community Edition server. It is the open-source version of MySQL that is freely available. Please refer to the following page for more information on these two editions: http://www.mysql.com/products/which-edition.html. It will clarify the differences between the Community and Enterprise editions of MySQL.


Alors question stupide, tu l'as bien installé sur le Mac ?


----------

