/* La suite ne sert que pour le programmeur (ce sont des
commentaires qui permettent de se rappeler certaines
constantes).
*/
//''Mode de lecture du fichier, un flux est nécessaire''
//''Le second argument définit les différents modes de lecture parmis''
//''PR_RDONLY =0x01 lecture seulement''
//''PR_WRONLY =0x02 écriture seulement''
//''PR_RDWR =0x04 lecture ou écriture''
//''PR_CREATE_FILE=0x08 si le fichier n'existe pas, il est créé (sinon, sans effet)''
//''PR_APPEND =0x10 le fichier est positionné à la fin avant chaque écriture''
//''PR_TRUNCATE =0x20 si le fichier existe, sa taille est réduite à zéro''
//''PR_SYNC =0x40 chaque écriture attend que les données ou l'état du fichier soit mis à jour''
//''PR_EXCL =0x80 idem que PR_CREATE_FILE, sauf que si le fichier existe, NULL est retournée''
//''Le troisième argument définit les droits''
/* Fin des repères concernant les constantes
On va demander une nouvelle fois à mozilla de nous rendre
un service.
On va lui demander de nous créer une instance pour ouvrir
un fichier en lecture. On l'appellera "inputStream"
note 1 : dans le code original, elle s'appelle "is".
note 2 : inputStream = flux d'entrée.
*/
var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance( Components.interfaces.nsIFileInputStream );
/*
Maitenant qu'on a notre clone, on va l'initialiser, c'est à dire lui
préciser ce qu'il doit avoir dans le ventre :
*/
inputStream.init(file, 0x01, 00004, null);
/*
Quel fichier ? veut-il savoir en premier. On lui répond : « le fichier
'file' qu'on a créé un peu plus haut.»
Qu'est-ce que vous voulez faire dessus ? veut-il savoir ensuite. On lui
répond : « rassure-toi, juste le lire » (0x01 = read only)
''(des meilleurs que moi préciseront les deux arguments suivants. Il me
semble qu'ils concernent les autorisations sur le fichier et le buffering
du fichier, mais je n'en suis pas assez sûr)''
*/
/*
Maintenant qu'on a créé un flux, il va falloir lui dire comment
on veut le lire.
On demande à nouveau service à mozilla (que ferait-on sans lui ?),
en lui disant qu'on voudrait lire en "binaire" (pour faire simple :
lire sans faire aucune interprétation du contenu du fichier)
*/
var sis = Components.classes["@mozilla.org/binaryinputstream;1"]
.createInstance(Components.interfaces.nsIBinaryInputStream);
sis.setInputStream( inputStream );
/*
On dit à javascript que ce service doit utiliser le flux 'inputStream'
que nous avons créé avant.
*/
var output = sis.readBytes( sis.available() );
/*
C'est ici qu'on lit véritablement le fichier, par bytes. Ce que l'on
lira sera mis dans la variable (var) 'output'.
sis.available() : pour dire de lire TOUT le fichier. On aurait pu
lui dire de n'en lire qu'une partie.
*/
// Enfin, nous renvoyons à notre fonction principale le contenu
// du fichier
return output;
}
/* Fin de la fonction 'read(…)'
]]>
/*
On dit au programme que nous avons fini d'écrire des "données
brutes". Ces accolades font références au CDATA plus haut
*/
</script>
/*
Nous avons fini la définition de notre code javascript.
Maintenant va véritablement commencer le code de notre page.
*/
<[[html:h1>Test]] de lecture d'un fichier</[[html:h1]]>
<!--
Nous voulons écrire un titre (h1).
Notez l'utilisation du "[[html:h1]]" qui dit à l'interpréteur :
Attention, ce n'est pas une balise XML (ou plutôt XUL), c'est
une balise HTML (il comprendra, parce que nous avons défini
l'espace de nom — namespace — dans le <window…> en haut de page.
-->
<hbox style = "overflow: auto;" flex="1">
<!--
Une balise xul normale, qui dit de construire une boîte (box)
horizontale (le "h" avant le "box").
style="[[overflow:auto]]" : pour dire au générateur de rendu de s'occuper
lui-même du "dépassement de texte". Si le texte est trop long,
il ajoutera lui-même un ascenseur pour atteindre tout le texte.
Si la boîte est plus grosse que le texte, il n'y aura pas d'as-
censeur.
flex="1" : pour dire que la boîte doit être flexible, souple. Elle
s'adaptera à la dimension de la fenêtre, qui est son conteneur (son
parent).
-->
<[[html:pre]] id="contenu">…</[[html:pre]]>
<!--
Dans la boîte que nous avons créée, nous allons mettre l'élément
qui doit recevoir le contenu du fichier (qui a pour nom "contenu",
qui renvoie directement au 'document.getElementById' que nous
avons défini dans javascript.
On met un point de suspension en attendant, mais il sera remplacé
par le texte du fichier (ou le message d'erreur) sitôt après le
chargement de la page.
Notez, à nouveau, l'utilisation de "html:" pour préciser que c'est
un élément HTML. Cet élément est un 'pre', c'est à dire qu'il doit
afficher le texte exactement comme il se présente dans le fichier.
Les retours de chariot, habituellement "invisibles" dans une page
HTML, seront bien des retours de chariot.
-->
</hbox>
<!--
On ferme la boîte horizontale.
Notez que puisque cette boîte ne contient qu'un seul élément, elle
aurait être verticale (vbox) sans rien changer à l'affichage.
-->
<label value="…" id="nom_fichier"/>
<!--
Le dernier élément à mettre dans la fenêtre, c'est le petit texte
où nous devons préciser le chemin d'accès du fichier qui, rappelez-
vous, doit s'appeler 'nom_fichier'.
Ici aussi, on met en attendant un point de suspension.
-->
</window>
<!--
On ferme la fenêtre, et c'est la fin du fichier.
-->
La fonction débute par l'obtention de privilèges supplémentaire pour accéder à votre système de fichiers. C'est une condition obligatoire si vous lancez cette page en local, mais inutile si vous la lancez depuis une adresse chrome.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.