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
|