Dans ASP, FSO signifie l'objet système de fichiers, qui est un objet système de fichiers.
Le système de fichiers informatiques que nous allons manipuler fait référence à la localisation sur le serveur Web. Alors, assurez-vous d'avoir les bonnes autorisations à ce sujet. Idéalement, vous pouvez configurer un serveur Web sur votre propre machine afin que vous puissiez facilement effectuer des tests. Si vous exécutez sur Windows, essayez les PWS de serveur Web personnel gratuit de Microsoft.
Objets du modèle FSO
Objet Drive: Drive des objets pour accéder à des disques ou à des lecteurs de réseau
FileSystemObject Object: File System ObjectS pour accéder au système de fichiers de l'ordinateur
Objet de dossier: Objet de dossier pour accéder à toutes les propriétés d'un dossier
Objet TextStream: Objet de flux de texte pour accéder au contenu du fichier
Vous pouvez utiliser l'objet ci-dessus pour faire quoi que ce soit sur votre ordinateur, y compris les activités de sabotage ;-( Donc, soyez prudent avec FSO. Dans un environnement Web, il est très important de stocker des informations, telles que les informations utilisateur, les fichiers journaux, etc. FSO Fournit un moyen puissant et simple de sauvegarder efficacement les données.
Le FSO est alimenté par Microsoft et ASP n'est probablement plus disponible pour les systèmes non Windows.
Comment utiliser FSO?
Pour utiliser FSO pour effectuer tous les travaux, créez d'abord un objet, le code est comme ceci:
| <% set fso = server.createObject (scripting.fileSystemObject) % > |
Cela crée FSO et attribue la variable FSO. Ici, nous pouvons utiliser fso.method ou fso.property, qui sera vu dans l'exemple suivant.
Le modèle FSO est situé dans un fichier DLL d'exécution de script fourni par Microsoft, qui est scrrun.dll. Vous pouvez référencer ce fichier DLL dans n'importe quelle application, tel que MS Access, Word. Autrement dit, il ne se limite pas à l'appliquer dans ASP.
Voici une brève liste des méthodes FSO:
| Méthode FSO | |
| File de copie | Copiez un ou plusieurs fichiers sur un nouveau chemin |
| CreateTextfile | Créez un fichier et renvoyez un objet TextStream |
| Deletefile | Supprimer un fichier |
| OpenTextFile | Ouvrez le fichier et renvoyez l'objet TextStream pour lire ou ajouter |
Si vous souhaitez connaître les méthodes et les propriétés FSO complètes, veuillez vous référer à Microsoft MSDN. Voyons quelques exemples ci-dessous.
Supposons que vous souhaitiez créer un livre d'or simple où vous pouvez créer une base de données où vous stockez des informations utilisateur. Cependant, l'utilisation de FSO pour stocker des informations vous fera économiser du temps et de l'argent si la puissance de la base de données n'est pas requise. Et, certains FAI peuvent restreindre les applications de base de données sur le Web.
Supposons que vous ayez collecté certaines informations utilisateur dans un formulaire, voici un code HTML simple:
| < html > < corps > < Form Action = FormHandler.asp Method = Post > < Type d'entrée = taille de texte = 10 name = nom d'utilisateur > < Type d'entrée = taille de texte = 10 nom = page d'accueil > < Type d'entrée = taille de texte = 10 nom = e-mail > < / Form > < / corps > < / html > |
Jetons un coup d'œil au code qui traite les formulaires dans FormHandler.asp:
| <% 'Obtenez des informations de formulaire strname = request.form (nom d'utilisateur) strhomePage = request.form (Homepage) stremail = request.form (e-mail) 'Créer l'objet FSO Set fso = server.createObject (scripting.fileSystemObject) |
Jusqu'à présent, rien de nouveau n'est rien de plus que d'obtenir la valeur du champ de formulaire et d'attribuer des valeurs aux variables. Une partie intéressante apparaît ci-dessous - Écrivez un fichier:
| chemin = c: empl est.txt ForReading = 1, pour l'écriture = 2, pour la réappartement = 3 'Ouvrez le fichier set file = fso.opentextfile (chemin, pour pair, true) 'Écrivez les informations sur le fichier file.write (strname) & vbcrlf file.write (strhomePage) & vbcrlf file.write (stremail) & vbcrlf 'Fermer et nettoyer file.close set file = rien Définir FSO = rien |
Rappelons que la méthode OpenTextFile renvoie un objet TextStream, qui est un autre objet dans le modèle FSO. L'objet TextStream révèle des moyens de manipuler le contenu des fichiers, tels que l'écriture, la lecture et le saut d'une ligne. Le VB constant VBCRLF produit un caractère Newline.
Vrai est défini dans le paramètre de commande d'OpenTextFile, qui indique au système que si le fichier n'existe pas, créez-le. Si le fichier n'existe pas et que le paramètre True n'est pas défini, une erreur se produit.
Accédez maintenant au répertoire C: EMP, Open Test.txt, et vous pouvez voir les informations suivantes:
| Nom de l'utilisateur Page d'accueil de l'utilisateur E-mail de l'utilisateur |
Bien sûr, ces mots peuvent être remplacés par tout ce qui est entré dans le formulaire.
Maintenant, certaines informations utilisateur sont enregistrées dans un fichier, comme une base de données simple. Supposons qu'il y ait un utilisateur qui souhaite connaître tous les visiteurs et séparer les pièces pertinentes des informations enregistrées car il n'y a pas de colonne structurée comme une base de données.
Nous savons que dans le fichier créé, la ligne 1 est le nom d'utilisateur, la ligne 2 est leur page d'accueil et la ligne 3 est leur adresse e-mail. Les utilisateurs enregistrés stockeront également leurs informations dans cette structure, donc toutes les 3 lignes contiendront les informations d'enregistrement d'un utilisateur. Sachant cela, vous pouvez écrire le code suivant pour afficher les informations:
| <% 'Créer l'objet FSO set fso = server.createObject (scripting.fileSystemObject) chemin = c: empl est.txt 'Ouvrez le fichier set file = fso.opentextfile (chemin, 1) < - pour En lisant |
Ensuite, analysez chaque ligne et formatez les données:
| faire jusqu'à file.atendofstream Réponse.write (nom: & file.readline &) Réponse.write (page d'accueil: & file.readline &) Response.Write (Email: & file.readline & < P >) boucle 'Fermer et nettoyer file.close set file = rien Définir FSO = rien % > |
Il s'agit simplement d'une sortie très simple, mais vous pouvez inclure des informations sur la table ou le formulaire DHTML selon la situation.
Si le fichier a été correctement créé et écrit, la petite boucle ci-dessus énumèrera correctement les informations de tous dans la base de données. La méthode Readline lit 1 ligne de contenu jusqu'à ce qu'une nouvelle ligne soit rencontrée, et l'appel de lecture ultérieur lira la ligne suivante. AtendOfStream est une propriété d'un objet TextStream qui nous dit quand nous rencontrons la queue d'un fichier.
Supposons que pour une raison quelconque, nous ne formons pas le fichier correctement, si un utilisateur n'a que 2 lignes d'informations au lieu de 3 lignes, alors certaines erreurs se produiront. Notre boucle ici récupère les 3 lignes d'informations suivantes dans le fichier.
| Erreur d'objet serveur 'ASP 0177: 800A003E' |
Par conséquent, assurez-vous d'ajouter un code de gestion des erreurs pour empêcher l'insertion de lignes inutiles dans le fichier ou les informations de ligne nécessaires sont manquantes.
Les connaissances de base sont discutées ci-dessus, puis la question des autorisations est discutée. FSO s'exécute avec le compte d'utilisateur qui le crée, en d'autres termes, si quelqu'un accède à votre page depuis Internet, ce compte Internet crée FSO. Si vous vous connectez à l'ordinateur en tant qu'administrateur et que vous vous connectez à la page, le compte administrateur crée le FSO. Ceci est très important car un certain compte a certaines autorisations, et FSO nécessite certaines autorisations pour exécuter pleinement les fonctions.
Les comptes Internet (iUser_machinename, MachineName est le nom du serveur) n'ont généralement que des autorisations de lecture, ce qui signifie que l'utilisateur ne pourra pas écrire dans le fichier du livre d'or. Cependant, il existe plusieurs options pour contourner ce problème.
Tout d'abord, il est également très difficile, obligeant les utilisateurs à se connecter au serveur avant de remplir le livre d'or. Cependant, le point clé du livre d'or est de collecter des informations auprès des utilisateurs anonymes, et si l'utilisateur est invité à vous connecter, vous devez savoir qui ils sont. Alors, sautez cette option et voyez la suivante.
La deuxième méthode consiste à créer un répertoire ou un fichier, et l'utilisateur iUser_machinename a des autorisations d'écriture. Cela peut ouvrir certaines vulnérabilités de sécurité potentielles, car toute personne qui connaît le bon répertoire et possède des compétences Web peut remplir du contenu sur le serveur. C'est un tabou sérieux. Vous devez donc confirmer que les informations de ces répertoires en écriture sont enregistrées dans le lieu caché et définir ces répertoires en dehors de la structure du répertoire Web autant que possible (par exemple, sous Windows, il s'agit d'un répertoire qui n'est pas dans le répertoire Inetpub).
Vous pourriez penser: OK, maintenant je sais comment écrire dans le fichier. Mais pouvons-nous en faire plus? Essayons de créer une fonction de recherche pour le site Web.
La clé pour construire un moteur de recherche est la récursivité. Écrivez principalement un morceau de code pour rechercher des fichiers dans le répertoire, puis exécutez le même code sur toutes les boucles de répertoires. Puisqu'il n'est pas possible de déterminer le nombre de sous-répertoires au total, le code de recherche doit être exécuté encore et encore jusqu'à ce qu'il soit terminé. Les appels récursifs sont très bons!
Créons une page de recherche. Supposons qu'un formulaire HTML ait été créé, où l'utilisateur entre dans une chaîne de recherche.
| Objfolder faible Dim StrSearchText Faible objfso strSearchText = request.form (searchText) < - la chaîne de recherche 'Créez le FSO et les objets de dossier Set fso = server.createObject (scripting.fileSystemObject) Set objfolder = objfso.getfolder (server.mappath (/)) Recherchez objfolder |
Le code ci-dessus initialise simplement les variables et la fonction de recherche exécute la fonction de recherche, qui est décrite comme suit:
| Recherche de fonction (objfolder) Faible objsubfolder 'Boucle via chaque fichier dans le courant dossier Pour chaque objfile dans objfolder.files Set objTextStream = objfso.OpenTextFile (objfile.path, 1) < - pour la lecture 'Lisez le contenu du fichier dans un variable strFileContents = objTextStream.readall 'Si la chaîne de recherche est dans le fichier, alors Écrire un lien 'au fichier Si instr (1, strFileContents, strsearchText, 1) alors Réponse.write < a href = / & objfile.name & _ > & objfile.name & < / a >< br > BOLFILEFOUND = VRAI Terminer si objTextStream.close Suivant 'Voici la partie récursive - pour chacun 'Sous-dossier dans ce répertoire, exécutez à nouveau la fonction de recherche Pour chaque objsubfolder dans Objfolder.Sublolders Rechercher objsubfolder Suivant Fonction finale |
Afin de pouvoir ouvrir un fichier, FSO nécessite le chemin du fichier réel, pas le chemin Web. Par exemple, c'est C: Inetpubwwwroot empiindex.html, pas www.enfused.com/temp/index.html ou /temp/index.html. Afin de convertir ce dernier en premier, utilisez Server.mappath (nom de fichier), nom de fichier pour représenter le nom du chemin Web.
Le code ci-dessus sera exécuté dans chaque sous-répertoire du dossier dans le répertoire initial que vous spécifiez, où le répertoire initial fait référence au répertoire de racine Web /. Ensuite, ouvrez simplement chaque fichier dans le répertoire pour voir s'il contient la chaîne spécifiée.
Notez que lorsque le nombre de fichiers et de sous-répertoires augmente, le temps nécessaire pour les recherches augmentera. Si vous avez besoin de travaux de recherche lourds, il est conseillé de prendre d'autres méthodes, telles que le serveur d'index INDEX Server de Microsoft.
À ce stade, vous avez peut-être une bonne compréhension du FSO. Jetons un coup d'œil plus approfondi pour résoudre des problèmes plus complexes.
Tout d'abord, vous voudrez peut-être renommer le fichier. Pour garder une trace de tous les documents, vous voudrez les renommer pour être uniques afin qu'ils puissent être facilement distingués par le système. Malheureusement, FSO n'autorise pas les opérations de changement de nom de fichier simples, nous devons donc le modifier.
| <% 'Créer l'objet FSO set fso = server.createObject (scripting.fileSystemObject) chemin = c: empl est.txt strdate = remplacer (date (), /,) strdir = c: inetpubwwwrootarticles & strdate strNewFileName = hour (maintenant) & _ & minute (maintenant) & _ & deuxième (maintenant) & .html 'Ouvrez l'ancien fichier set file = fso.opentextfile (chemin, 1) < - pour la lecture strText = file.readall set file = rien 'Vérifiez et / ou créez un dossier Sinon fso.folderexists (server.mappath (strdir)) alors set f = fso.createfolder (server.mappath (strdir))) autre set f = fso.getfolder (server.mappath (strdir)) terminer si 'Créer et écrire un nouveau fichier set file = fso.createtextfile (f.path & & strNewFileName) file.write (strText) Définir F = rien file.close set file = rien 'Supprimer l'ancien fichier FSO.DeleteFile (Path & & RST (nom de fichier) et i) 'Nettoyer Définir FSO = rien % > |
L'absence de capacités FSO est devenue un avantage ici, et nous pouvons effectuer 2 étapes à la fois. Tout d'abord, ouvrez le fichier et lisez le contenu du fichier. Supposons ici que vous souhaitez créer un dossier unique et un fichier unique pour stocker l'article. Cependant, comme le chemin vers le dossier changera tous les jours, il faut d'abord vérifier si le dossier existe déjà et s'il n'existe pas, créez-le. Cela se fait dans l'extrait fso.folarexistes fso. Ensuite, prenez ce chemin et créez un nouveau fichier. Une fois le nouveau fichier créé, supprimez l'ancien fichier, qui se fait via fso.deletefile.
Ces 2 étapes sont les suivantes: renommer le fichier, puis le déplacer vers un répertoire plus approprié. Notez que vous pouvez également effectuer plus d'opérations sur des fichiers ici, tels que l'édition de contenu avant d'écrire dans un nouveau fichier.
Le FSO a quelques faiblesses - par exemple, il est difficile de gérer les fichiers binaires, qui incluent des documents Word, des fichiers dans de nombreux formats graphiques et d'autres fichiers. Cependant, vous pouvez toujours manipuler ces fichiers par d'autres moyens - déplacez-les, les supprimer, etc. Tout ce que vous ne pouvez pas faire est d'ouvrir ou de les écrire.
Une autre limitation est le problème de la longueur du fichier. Lorsque un contenu est lu et écrit immédiatement, toutes les informations sont stockées en mémoire - plus il y a de contenu, plus il consomme de la mémoire. Cela ralentira chaque emploi. Par conséquent, si vous avez besoin d'exploiter des fichiers très volumineux ou un grand nombre de petits fichiers, envisagez de diviser les fichiers en petits morceaux et de nettoyer fréquemment la mémoire. L'intégration d'applications dans les composants d'objets COM peut également améliorer considérablement la vitesse du programme.
De même, vous ne pouvez pas utiliser FSO pour gérer les autorisations et les propriétés de fichiers et de dossiers. Cette méthode est souvent utilisée dans CGI et Perl, mais malheureusement, il n'y a pas de moyen satisfaisant de l'implémenter avec FSO.
Que puis-je faire d'autre avec FSO?
Il existe de nombreuses fonctionnalités de FSO, mais beaucoup de gens ne s'en rendent pas compte. Ces fonctions sont souvent découvertes après avoir senti qu'il est difficile de faire quelque chose.
Voici quelques-unes de ces fonctionnalités incommo mais très cool:
Caractéristiques FSO qui sont rarement comprises
La méthode GetSpecialFolder renvoie le chemin d'accès à un dossier Windows spécifique: répertoire d'installation Windows; Exiger getAbsolutepathName La méthode renvoie le chemin absolu vers le dossier (similaire à server.mappath) lors du stockage des données temporaires.
Par exemple, FSO.getAbsolutepathName (région) renverra un résultat similaire à ce qui suit: C: MyDocsmyfolder Oxyde
La méthode GetExtensionName renvoie l'extension de la dernière partie du chemin (par exemple: fso.getExtensionName (c: docs est.txt) renverra txt) getBasename et getparentfolder les méthodes renvoie le dossier parent de la dernière partie du chemin
(Par exemple: FSO.GetParentFolder (C: DocsMyDocs) Renvoie des «documents») La propriété Drive Renvoie une collection de tous les disques disponibles localement pour établir une interface utilisateur de type navigateur de ressources.
Lorsque vous utilisez les fonctions ci-dessus, il est préférable de créer un code pour la gestion des erreurs. Parce que si les paramètres requis n'existent pas, des informations gênantes seront générées.
Résumer
Comme nous l'avons vu, le FSO est très utile et ce que nous introduisons ici est juste la pointe de l'iceberg. Vous pouvez utiliser FSO pour créer des applications puissantes et simplement effectuer de nombreuses tâches.