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")
if not abs(the result) then alert "échec
!"
La fonction retourne 0 si le fichier existe, - 7 (?) sinon...
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 Shockwave
studio (package java). L'éditeur peut être contacté
sur son site http://www.littleplanet.com/kent/kent.html
<
Sommaire
|