Copies de fichiers avec FileXtra 

 

 

L'Xtra FileXtra met à la disposition du développeur Lingo de nouvelle commandes permettant d'identifier les lecteurs, de créer des dossiers, de déplacer, copier ou encore détruire des fichiers. FileXtra appartient à cette nouvelle génération d'Xtras Lingo ne nécessitant pas de manipulation d'objet. Visite guidée...

Pour s'assurer de la disponibilité de l'Xtra, on s'enquiert des Xchoses disponibles en saisissant ShowXlib dans la fenêtre message de Director:

ShowXlib

-- XLibraries:
-- Xtra: FileXtra
-- Xtra: UiHelper
-- Xtra: JavaConvert
-- Xtra: CompileJava
-- Xtra: QuicktimeSupport
-- Xtra: NetLingo
-- Xtra: Multiuser
-- Xtra: XmlParser
-- Xtra: Mui
-- Xtra: fileio

Director (ici la version 7) déroule alors la liste des Xtras Lingo se trouvant dans le dossier de l'application lors de son lancement. Les habitués noteront qu'aucun Xobjet n'apparaît plus dans cette liste. Director 7, en effet, ne veut plus entendre parler de ces vieux bouts de codes qui n'étaient de toute façon utilisables que sur l'une ou l'autre plate-forme. Sniff !

L'Xtra FileXtra est bien présente, on obtient le détail de ses méthodes par "interface()" :

put interface(Xtra "FileXtra")

L'Xtra fournit alors la liste des instructions dont elle enrichit Lingo.

-- "Xtra FileXtra
-- FileXtra v2.0.5 of 26-May-97 by Kent Kersten
-- Copyright (c) 1996-97 Little Planet Publishing
-- For updates see http://www.littleplanet.com/kent/kent.html
-- Contact the author at kent@littleplanet.com
-- This no-charge Xtra may be freely distributed as long as it is
-- accompanied by its documentation and sample movie.
-- Drive Functions--
* DriveExists string driveName
* DrivesToList
* DriveFreeSpace string driveName
* DriveIsCDROM string driveName
-- File Functions --
* FileOpenDialog string initialDir, string filtStr
* FileSaveAsDialog string initialDir, string filename, string prompt
* FileExists string fileName
* RenameFile string oldName, string newName
* DeleteFile string fileName
* CopyFile string fromFName, string toFName
* GetFileModDate string fileName
-- Directory Functions --
* DirectoryExists string dirName
* CreateDirectory string dirName
* DeleteDirectory string dirName
* XDeleteDirectory string dirName
* CopyDirectory string fromDirName, string toDirName
* XCopyDirectory string fromDirName, string toDirName
* DirectoryToList string dirName
"

Si vous êtes un habitué des Xchoses vous devez avoir remarqué l'absence d'une méthode globale mNew (et d'ailleurs aussi le fait qu'aucun nom de méthode de l'Xtra ne commence par un "m"). C'est que FileXtra ne demande aucune instanciation ! Vous pouvez oublier ici tout ce que vous savez des objets... Si les anciens d'HyperCard retrouvent là leurs "commandes externes", les autres simplement se réjouiront de cette plus grande facilité de mise en œuvre car pour utilisez les services de FileXtra, il suffit d'utiliser ses fonctions (peut-on encore parler de méthodes ?) comme on le ferait de n'importe quelle instruction Lingo. Dès lors et par exemple...

put DrivesToList()

renvoie immédiatement la liste des volumes disponibles :

-- ["boot", "Macintosh HD", "Archives"]

C'est si simple ! Si l'on sait saisir une commande Lingo, on sait se servir de FileXtra. le seul risque ici : oublier que ça n'est pas du Lingo et que si l'Xtra est absente du dossier ad hoc, Director protestera.

 

À quoi ça sert ?

Si nous en nous savons déjà assez sur la mise en œuvre de l'Xtra, nous pouvons peut-être nous demander à quoi elle sert ? Le CrapoWeb se propose de répondre ici par un cas d'école.

"Drives functions - Files functions - Directory functions... " La classification des méthodes de l'Xtra indique assez sa fonction : gérer les fichiers. Et à quoi bon gérer des fichiers ?

Et bien par exemple, chacun sait qu'un film QuickTime s'affichera bien mieux s'il est joué depuis le disque dur. À l'aide de FileXtra, nous pouvons facilement copier une vidéo intégré depuis un Cd-Rom, sur le disque dur de l'utilisateur et ainsi créer ces conditions idéales :

Bien sûr, pourf aire cela, on doit d'abord connaître l'espace disponible sur le ou les disques durs. On rédige une instruction mêlant Lingo (ici en bleu) et fonctions externes de l'Xtra :

 

put DriveFreeSpace ( getAt ( DrivesToList(), 1) ) / (1024 * 1024) & " Mo"

on obtient la capacité du premier volume en méga-octets

-- "826 Mo"

 

Dans un script d'animation, par conséquent, on pourra utiliser une boucle testant un à un les disques durs et retournant le nom de celui qui possède la plus grosse capacité :

 

on celuiDesDisquesQuiALePlusDePLace
   set capacite to 0
   repeat with n = 1 to count(DrivesToList())
       if capacite < DriveFreeSpace( getat ( DrivesToList(), n ) ) then
      set capacite to DriveFreeSpace( getat( DrivesToList(), n ) )
      set lePlusGros to getat( DrivesToList(), n )
      end if
   end repeat
   return lePlusGros
end

On peut maintenant réaliser la copie d'un fichier depuis le Cd-Rom sur le volume désigné. Peut-être voudra-t-on auparavant créer un dossier de destination... Dans les deux cas, nous devons utiliser un chemin d'accès adapté à la plate-forme et nous rappeler que le séparateur universel Lingo @ n'est pas exploitable dans le contexte d'un Xtra. Il faut utiliser l'antislash (Windows) ou les deux points (Mac)...

 

createDirectory( celuiDesDisquesQuiALePlusDePLace & ":desktop folder:Dossier temporaire")

global DisqueOuLaCopieAEteEffectuee
set DisqueOuLaCopieAEteEffectuee to celuiDesDisquesQuiALePlusDePLace

copyFile("CD-ROM:data:films:GrosFilm.mov", celuiDesDisquesQuiALePlusDePLace & ":desktop folder:Dossier temporaire:GrosFilm.mov")

 

Les antivirus, jusqu'à preuve du contraire se laissent faire ! Attention aussi, la copie d'un gros fichier prend du temps et peut-être faut-il renoncer à lancer un autre processus ou une animation complexe pendant que la copie s'effectue. On notera dans le script qui précède que l'on stocke dans une variable globale le nom du volume utilisé. Il faut bien comprendre qu'après la copie d'un gros fichier, en effet, la capacité du disque aura changé et ne permettra plus de le distinguer !

FileXtra - c'est dommage - ne retourne pas de code d'erreur. Après ce travail de copie et avant de demander à Director d'utiliser la version du film transférée sur le disque dur, il faut mieux s'assurer que tout c'est bien passé à l'aide de :

FileExists (DisqueOuLaCopieAEteEffectuee & ":desktop folder:Dossier temporaire:GrosFilm.mov")

Enfin, après utilisation et par respect pour l'utilisateur, ne convient-il pas aussi que nous lui rendions son disque dur dans l'état où nous l'avons trouvé ? FileXtra peut détruire sans avertissement un dossier et tout son contenu. Dangereux :

XDeleteDirectory (DisqueOuLaCopieAEteEffectuee & ":desktop folder:Dossier temporaire")

Rappelez-vous ! Si la mise en œuvre de FileXtra est si simple, on ne doit pas confondre ses fonctions avec Lingo et un message d'erreur attend tout utilisateur qui oublierait d'accompagner son projecteur d'un exemplaire de l'Xtra.

 

 FileXtra est freeWare, livré avec Director 7. L'éditeur peut être contacté sur son site http://www.littleplanet.com/kent/kent.html