JDNet | Solutions | Emploi | Votre high-tech
 
Linternaute | Copainsdavant
Séminaires & Evénements | Etudes
   

Rechercher  

 
Sociétés Prestataires Carnet Formations Progiciels Encyclo Fonds Guide d'achat Comparateur Téléchargement Livres
Actualités
   2003
   2002
   2001
   Livres
Rubriques
   Java/J2EE
   PHP
   XML
   Client Web
   Technos .NET
   Flash
   Algo/Méthodes
   Outils

Dossiers
   Tous les dossiers

   PHP, Flash, SVG
   Perl / CGI - SSI
   Langages Web
   Services Web
   Sécurité
Ressources
   Interviews

   Téléchargement
   Composants
   Documentation
Contacts
   Rédaction
   Webmaster
© Benchmark Group

Accéder au système de fichiers en JavaScript
Grâce au "FileSystemObject" de la bibliothèque de scripts Microsoft, il est possible de manipuler des fichiers (lecture, écriture), des répertoires (déplacement, suppression). Ou comment JavaScript peut faire aussi bien que des langages comme Php ou Cold Fusion.

Si vous souhaitez profiter des fonctionnalités offertes par ActiveXObject(), il vous faut posséder au moins IE 4. Pour résumer, le rôle de cette fonction est de vous permettre d'accéder à un objet ActiveX à partir d'un langage de script, ici JavaScript.
Notez que l'usage de ces objets est soumise aux restrictions de sécurité de vos navigateurs. Des paramètres trop contraignants provoquent parfois l'affichage d'un message de ce type : "Error message Automation server can't create object".
Pour en savoir plus sur les "Automation server", consultez notre tutoriel "OLE et les objets automates (Automation Objects)".

Grâce au "FileSystemObject" de la bibliothèque de scripts Microsoft, il est possible de manipuler des fichiers (lecture, écriture), des répertoires (déplacement, suppression). Ou comment JavaScript peut faire aussi bien que des langages comme Php ou Cold Fusion.

Quelques exemples pour nous échauffer

Ces fonctions n'ont rien de compliqué à partir du moment où l'on comprend qu'avant d'accéder à l'une des nombreuses méthodes (ce lien vous donne aussi leur syntaxe) du "FileSystemObject", il faut s'y connecter.

Tout commence en effet par :

var fso = new ActiveXObject("Scripting.FileSystemObject");

Grâce à notre instance "fso" nous allons pouvoir manipuler les méthodes de l'objet FileSystemObject, lui-même issu du "Microsoft's Scripting Engine".

L'accès aux méthodes étant résolu, le plus dur est fait ! Il nous suffit maintenant de nous conformer à la syntaxe de chacune d'elles.

Voyons comment créer par exemple un fichier texte. Nous supposons que l'instance "fso" est déjà créee.

var newFileObject = fso.CreateTextFile("nom_fichier", true);

Le paramètre "true" sert à écraser un fichier de même nom éventuellement existant.

De même, pour tester si un lecteur "x" existe sur votre configuration, il suffit d'écrire :

DriveExist = fso.DriveExists("x");

Le résultat est fourni sous forme d'un booléen, il est ainsi aisé de tester la valeur de DriveExist pour agir en conséquence.

Les champs d'applications de ces méthodes sont vastes :
- Traitements de fichier (copie, déplacement, création, effacement, lecture, écriture)
- Traitements de répertoires (copie, déplacement, création, effacement)
- Vérification d'existence de fichiers, de répertoires, de disques.

Et d'autres encore... Reportez-vous au lien précédent pour une liste exhaustive des méthodes disponibles.

Nous l'avons vu, ces méthodes sont très simples à utiliser. Plutôt que d'aligner ici la liste des méthodes disponibles, les unes à la suite des autres, voyons comment certaines d'entres elles peuvent être utilisées conjointement. Nous décidons ici de construire une petite application capable de gérer une partie du traitement lié à la gestion d'un stock de photos. Ce programme peut s'avérer utile pour un back-office par exemple.

Notre application

Avant de voir plus en détails quelques éléments du code qui la compose, définissons tout d'abord le but et le fonctionnement de notre application.

Il s'agit ici de traiter des fichiers ".jpg" ou ".gif" uploadés par un "client" sur votre serveur. S'il s'agit d'un nouveau client, nous devons lui créer un répertoire capable de stocker ses images. Celles-ci doivent être classées en fonction de leur type, "jpg" ou "gif" dans des répertoires différents.
Une fois ces traitements effectués, il faut effacer les images du client qui se trouvent dans le répertoire "upload".
Enfin, chaque client traité est répertorié dans un fichier texte, nommé "log.txt", où figurent uniquement le nom des clients.

Si vous souhaitez tester cette application, il est important de respecter les instructions qui vont suivre.

Le fichier ".htm", qui contient le code JavaScript, doit être placé au même niveau que le répertoire "upload". Ce répertoire contient un sous-répertoire portant le nom du client à traiter. Les images de ce client sont stockées dans ce sous-répertoire.

Le but est donc de créer toujours au même niveau que le fichier ".htm" un répertoire portant le nom du client, contenant deux sous-répertoires, un nommé "jpg" et l'autre nommé "gif", destinés à stocker respectivement les images de type ".jpg" et ".gif". Enfin, le répertoire du client stocké dans "upload" doit disparaître.

Voici le code de cette petite application, nous vous conseillons de le "copier / coller" dans un éditeur de votre choix afin de bénéficier de la coloration syntaxique.

<html>
<head>
<title>Exemple d'utilisation de fonctions d'accès au File System</title>
<SCRIPT LANGUAGE="JavaScript">
<!--
function copydel()
{
// Cette fonction effectue les traitements finaux, copie...
fso.CopyFile(chemin_upload+"\\"+clientname+"\\*.jpg", chemin_client_jpg);
fso.CopyFile(chemin_upload+"\\"+clientname+"\\*.gif", chemin_client_gif);

// ... et effacement
fso.DeleteFolder(chemin_upload+"\\"+clientname, true);
alert('Traitement ok');
}

// On demande et stocke le nom du client
var clientname = prompt('Nom du client :', '');

// On instancie l'objet ActiveX, à faire une fois seulement.
var fso = new ActiveXObject("Scripting.FileSystemObject");

// On verifie si le repertoire de ce client existe deja
repExiste = fso.FolderExists(clientname);

// On calcule le "path" du repertoire client et du repertoire upload
var chemin_client = fso.GetAbsolutePathName(clientname);
var chemin_upload = fso.GetAbsolutePathName("upload");
var chemin_client_jpg = chemin_client+"\\jpg";
var chemin_client_gif = chemin_client+"\\gif";

// On logge chaque nom de client traité dans le fichier log.txt
var fh
fh = fso.OpenTextFile("log.txt", 8, true)
fh.WriteLine(clientname);
fh.Close();

if (repExiste)
{
     alert('Client connu');
     // Appel de la fonction "copydel"
     copydel();
}
else
{
     alert('Nouveau client !');
     // On cree le repertoire du client ainsi que ses sous-repertoires "jpg" et "gif"
     fso.CreateFolder(clientname);
     fso.CreateFolder(chemin_client_jpg);
     fso.CreateFolder(chemin_client_gif);
     // Appel de la fonction "copydel"
     copydel();
}
//-->
</SCRIPT>

</head>
<body>
     Fonction JavaScript pouvant servir dans un back-office par exemple...
</body>
</html>

Les méthodes utilisées dans cet exemple fonctionne de la même manière que celles que nous avons précedemment testé. Seules quelques lignes demandent donc des éclaircissements :

La fonction "copydel" utilise à deux reprises des concaténations :

fso.CopyFile(chemin_upload+"\\"+clientname+"\\*.jpg", chemin_client_jpg);
fso.DeleteFolder(chemin_upload+"\\"+clientname, true);

Il s'agit dans la première ligne de reconstituer le chemin ("path") du sous-répertoire du client dans "upload" afin d'accéder aux fichiers images d'un certain type.
La seconde ligne reconstruit le même chemin à des fins d'effacement cette fois.

Lorsque nous écrivons dans "log.txt"...

fh = fso.OpenTextFile("log.txt", 8, true);
fh.WriteLine(clientname);
fh.Close();

... Nous ouvrons le fichier "log.txt" en mode "Ajout" (voir la syntaxe de la méthode), c'est le chiffre 8 qui définit ce mode ("1" pour lire, et "2" pour écrire).
La méthode "WriteLine" permet d'écrire une ligne dans le fichier et d'ajouter à la fin un saut de ligne.

Pour notre exemple ces méthodes d'accès sont aussi efficaces que celles proposées par des langages "server-side", elles permettent de mettre en place facilement des fonctionnalités d'accès au système de fichier, sous réserve bien sûr que les contrôles ActiveX soient acceptés par le navigateur (ce qui peut être le cas pour une utilisation en interne sur un back-office).

[Arnaud Gadal 8 novembre 2001 , JDNet]

Gratuit - Les nouveautés de
JDNet Développeurs
Toutes nos newsletters
 

Quel est le meilleur langage pour aborder la programmation ?
Basic (VB & co...)
C/C++
Java/C#
PHP
Pascal/Delphi
Perl
Python
autre...



Les outils de développement dans le Guide des Solutions
e-business

L'encyclopédie JDNet Toutes les notions pratiques, techniques et économiques relatives à l'e-business.
>> Accès à la rubrique "Développement"

Comparez les prix Matériel, PDA, modems...
Les bonnes affaires de la high-tech avec Kelkoo.
>> Comparateur

Société | Contacts | Publicité | Presse | Recrutement | Tous nos sites | Données personelles
Pour tout problème de consultations, écrivez au Webmaster.
© Benchmark Group, 4 rue diderot 92156 Suresnes Cedex