En ASP, FSO significa objeto del sistema de archivos, que es un objeto del sistema de archivos.
El sistema de archivos de computadora que vamos a manipular se refiere a estar ubicado en el servidor web. Entonces, asegúrese de tener los permisos adecuados para esto. Idealmente, puede configurar un servidor web en su propia máquina para que pueda realizar pruebas fácilmente. Si se ejecuta en Windows, pruebe el servidor web personal gratuito de Microsoft PWS.
Objetos modelo FSO
Objeto de unidad: objetos de unidad para acceder a discos o unidades de red
FileSystemObject Object: objetos del sistema de archivos para acceder al sistema de archivos de la computadora
Objeto de carpeta: objeto de carpeta para acceder a todas las propiedades de una carpeta
Objeto TextStream: Objeto de flujo de texto para acceder al contenido del archivo
Puede usar el objeto anterior para hacer cualquier cosa en su computadora, incluidas las actividades de sabotaje ;-( Entonces, tenga cuidado con FSO. En un entorno web, es muy importante almacenar información, como información del usuario, archivos de registro, etc. FSO Proporciona una forma poderosa y simple de guardar datos de manera eficiente.
FSO funciona con Microsoft y ASP probablemente ya no esté disponible para sistemas que no son de Windows.
¿Cómo usar FSO?
Para usar FSO para realizar todo el trabajo, primero crear un objeto, el código es así:
| < %set fso = server.createObject (scripting.filesystemObject) % > |
Esto crea FSO y asigna el FSO variable. Aquí podemos usar fso.method o fso.property, que se verá en el siguiente ejemplo.
El modelo FSO se encuentra en un archivo DLL de tiempo de ejecución de script proporcionado por Microsoft, que es scrrun.dll. Puede hacer referencia a este archivo DLL en cualquier aplicación, como MS Access, Word. Es decir, no solo se limita a aplicarlo en ASP.
Aquí hay una breve lista de métodos FSO:
| Método FSO | |
| Archivo de copia | Copiar uno o más archivos a una nueva ruta |
| Createtextfile | Crear un archivo y devolver un objeto TextStream |
| Eliminar el archivo | Eliminar un archivo |
| Archivo de opente | Abra el archivo y devuelva el objeto TextStream para leer o agregar |
Si desea conocer los métodos y propiedades FSO completos, consulte Microsoft MSDN. Veamos algunos ejemplos a continuación.
Supongamos que desea crear un libro de visitas simple donde pueda crear una base de datos donde almacena la información del usuario. Sin embargo, el uso de FSO para almacenar información le ahorrará tiempo y dinero si no se requiere la potencia de la base de datos. Y algunos ISP pueden restringir las aplicaciones de bases de datos en la web.
Supongamos que ha recopilado información sobre el usuario en un formulario, aquí hay un código HTML de formulario simple:
| < html > < Cuerpo > < Form Action = FormHandler.ASP Method = Post > < tipo de entrada = size de texto = 10 nombre = nombre de usuario > < Tipo de entrada = Tamaño de texto = 10 Nombre = Página de inicio > < Tipo de entrada = Tamaño de texto = 10 Nombre = correo electrónico > < /forma > < /cuerpo > < /html > |
Echemos un vistazo al código que procesa formularios en Formhandler.asp:
| < % 'Obtener información de formulario strname = request.form (username) strhomepage = request.form (página de inicio) stremail = request.form (correo electrónico) 'Crea el objeto FSO Establecer fso = server.createObject (scripting.filesystemObject) |
Hasta ahora, nada nuevo no es más que obtener el valor del campo de formulario y asignar valores a variables. Una parte interesante aparece a continuación: escriba un archivo:
| ruta = C: EMP est.txt Forreading = 1, forwriting = 2, Forappending = 3 'Abra el archivo establecer archivo = fso.opentextfile (ruta, forappending, true) 'Escribe la información al archivo file.write (strname) y vbcrlf file.write (strhomepage) y vbcrlf file.write (stremail) y vbcrlf 'Cerrar y limpiar File.close Establecer archivo = nada Establecer FSO = nada |
Recuerde que el método OpenTextFile devuelve un objeto TextStream, que es otro objeto en el modelo FSO. El objeto TextStream revela formas de manipular el contenido del archivo, como escribir, leer y omitir una línea. El VB constante VBCRLF produce un carácter nuevo.
True se define en el parámetro de comando de OpenTextFile, que le dice al sistema que si el archivo no existe, cree. Si el archivo no existe y el parámetro verdadero no está definido, se produce un error.
Ahora vaya al Directorio C: EMP, Open Test.txt, y puede ver la siguiente información:
| Nombre del usuario Página de inicio del usuario Correo electrónico del usuario |
Por supuesto, estas palabras pueden ser reemplazadas por cualquier cosa ingresada en el formulario.
Ahora se guarda alguna información del usuario en un archivo, como una base de datos simple. Supongamos que hay un usuario que desea conocer a todos los visitantes y separar las piezas relevantes de la información registrada porque no hay una columna estructurada como una base de datos.
Sabemos que en el archivo creado, la línea 1 es el nombre de usuario, la línea 2 es su página de inicio y la línea 3 es su dirección de correo electrónico. Los usuarios registrados también almacenarán su información en esta estructura, por lo que cada 3 líneas contendrá la información de registro de un usuario. Sabiendo esto, puede escribir el siguiente código para mostrar la información:
| < % 'Crea el objeto FSO establecer fso = server.createObject (scripting.filesystemObject) ruta = C: EMP est.txt 'Abra el archivo establecer archivo = fso.opentextfile (ruta, 1) < - para Lectura |
A continuación, analice cada fila y formatea los datos:
| hacer hasta file.atendofstream Response.Write (Nombre: & File.Readline &) Response.write (página de inicio: & file.readline &) Response.write (correo electrónico: & file.readline y < p >) bucle 'Cerrar y limpiar File.close Establecer archivo = nada Establecer FSO = nada %> |
Esta es solo una salida muy simple, pero puede incluir información de tabla o formulario DHTML de acuerdo con la situación.
Si el archivo se ha creado y escrito correctamente, el pequeño bucle anterior enumerará adecuadamente la información de todos en la base de datos. El método Readline lee 1 línea de contenido hasta que se encuentra una nueva línea, y la llamada de línea de lectura posterior leerá la siguiente línea. Atendofstream es una propiedad de un objeto TextStream que nos dice cuándo encontramos la cola de un archivo.
Suponga que por alguna razón no estamos formando el archivo correctamente, si un usuario tiene solo 2 líneas de información en lugar de 3 líneas, entonces ocurrirán algunos errores. Nuestro bucle aquí recupera las siguientes 3 líneas de información en el archivo.
| Error de objeto del servidor 'ASP 0177: 800A003E' |
Por lo tanto, asegúrese de agregar algún código de manejo de errores para evitar que las líneas innecesarias se insertan en el archivo o falta la información de línea necesaria.
El conocimiento básico se discute anteriormente, y luego se discute el tema de los permisos. FSO se ejecuta con la cuenta de usuario que lo crea, en otras palabras, si alguien accede a su página desde Internet, entonces esta cuenta de Internet crea FSO. Si inicia sesión en la computadora como administrador e inicia sesión en la página, la cuenta de administrador crea el FSO. Esto es muy importante porque una determinada cuenta tiene ciertos permisos, y FSO requiere algunos permisos para ejecutar completamente funciones.
Las cuentas de Internet (IUSER_MACHINENAME, MachineName es el nombre del servidor) generalmente solo tienen permisos de lectura, lo que significa que el usuario no podrá escribir en el archivo del libro de visitas. Sin embargo, hay varias opciones para evitar este problema.
En primer lugar, también es muy difícil, lo que requiere que los usuarios inicien sesión en el servidor antes de completar el libro de visitas. Sin embargo, el punto clave del libro de visitas es recopilar información de usuarios anónimos, y si se le pide al usuario que inicie sesión, debe saber quiénes son. Entonces, omita esta opción y vea la siguiente.
El segundo método es crear un directorio o archivo, y el usuario iuser_machinename tiene permisos de escritura. Hacerlo puede abrir algunas posibles vulnerabilidades de seguridad, porque cualquiera que conozca el directorio correcto y tenga algunas habilidades web puede completar el contenido en el servidor. Este es un tabú serio. Por lo tanto, debe confirmar que la información de estos directorios de escritura se guarda en el lugar oculto y establece estos directorios fuera de la estructura del directorio web tanto como sea posible (por ejemplo, en Windows, este es un directorio que no está en el directorio inetPub).
Puede pensar: OK, ahora sé cómo escribir en el archivo. ¿Pero podemos hacer más? Intentemos crear una función de búsqueda para el sitio web.
La clave para construir un motor de búsqueda es la recursión. Principalmente, escriba un código para buscar archivos en el directorio y luego ejecute el mismo código en todos los bucles de directorios. Dado que no es posible determinar cuántos subdirectorios hay en total, el código de búsqueda debe ejecutarse una y otra vez hasta que esté terminado. ¡Las llamadas recursivas son muy buenas!
Creemos una página de búsqueda. Supongamos que se ha creado un formulario HTML, donde el usuario ingresa una cadena de búsqueda.
| Dim objfolder Dim strsearchText Dim objfso strsearchText = request.form (searchText) < - la cadena de búsqueda 'Crea los objetos FSO y de la carpeta Establecer fso = server.createObject (scripting.filesystemObject) Establecer objfolder = objfso.getfolder (server.mappath (/)) Buscar objfolder |
El código anterior simplemente inicializa las variables, y la función de búsqueda ejecuta la función de búsqueda, que se describe de la siguiente manera:
| Búsqueda de funciones (objfolder) Dim objsubfolder 'Reunir cada archivo en la actual carpeta Para cada objfile en objfolder.files Establecer objTextStream = objfso.opentextfile (objFile.path, 1) < - para leer 'Lea el contenido del archivo en un variable strfilecontents = objTextStream.Readall 'Si la cadena de búsqueda está en el archivo, entonces Escribe un enlace 'al archivo Si Instr (1, strfilecontents, strsearchText, 1) entonces entonces Respuesta.write < a href =/ & objfile.name & _ > & objfile.name & < /a >< br > BolfileFound = True Final si objTextStream.close Próximo 'Aquí está la parte de recursión, para cada uno 'Subcarpeta En este directorio, ejecute la función de búsqueda nuevamente Para cada objsubfolder en objfolder.subfolders Buscar objsubfolder Próximo Función final |
Para poder abrir un archivo, FSO requiere la ruta de archivo real, no la ruta web. Por ejemplo, es c: inetpubwwwroot empiindex.html, no www.enfused.com/temp/index.html o /temp/index.html. Para convertir el último en el primero, use server.mappath (nombre de archivo), nombre de archivo para representar el nombre de la ruta web.
El código anterior se ejecutará en cada subdirectorio de la carpeta en el directorio inicial que especifique, donde el directorio inicial se refiere al directorio raíz web/. Luego, simplemente abra cada archivo en el directorio para ver si contiene la cadena especificada.
Tenga en cuenta que a medida que aumenta el número de archivos y subdirectorios, aumentará el tiempo que toma las búsquedas. Si necesita un trabajo de búsqueda pesado, se le recomienda tomar otros métodos, como el servidor Index Index Servidor de Microsoft.
En este punto, es posible que tenga una buena comprensión de FSO. Echemos un vistazo más profundos para resolver problemas más complejos.
Primero, es posible que desee cambiar el nombre del archivo. Para realizar un seguimiento de todos los documentos, querrá cambiarlos para que sean únicos para que el sistema pueda distinguirlos fácilmente. Desafortunadamente, FSO no permite operaciones simples de cambio de nombre de archivo, por lo que tenemos que modificarlo.
| < % 'Crea el objeto FSO establecer fso = server.createObject (scripting.filesystemObject) ruta = C: EMP est.txt strdate = reemplazar (date (), /,) strdir = c: inetpubwwwrootarticles y strdate strNewFileName = Hour (ahora) & _ & minuto (ahora) & _ & segundo (ahora) y .html 'Abra el archivo anterior establecer archivo = fso.opentextfile (ruta, 1) < - para leer strtext = file.readall Establecer archivo = nada 'Verifique y/o cree una carpeta Si no es FSO.FoldeExists (server.mappath (strdir)), entonces Establecer F = FSO.CreateFolder (Server.Mappath (STRDIR)) demás establecer F = fso.getfolder (server.mappath (strdir)) final si 'Crear y escribir un archivo nuevo Establecer archivo = fso.createTextFile (F.Path & & strNewFileName) File.write (strText) establecer f = nada File.close Establecer archivo = nada 'Eliminar el archivo anterior FSO.DeleteFile (ruta y rst (nombre de archivo) y i) 'Limpiar Establecer FSO = nada %> |
La falta de capacidades FSO se ha convertido en una ventaja aquí, y podemos realizar 2 pasos a la vez. Primero, abra el archivo y lea el contenido del archivo. Supongamos que aquí desea crear una carpeta única y un archivo único para almacenar el artículo. Sin embargo, debido a que la ruta a la carpeta cambiará todos los días, primero debe verificarse si la carpeta ya existe y si no existe, cree. Esto se hace en el fragmento de FSO. Luego, tome esa ruta y cree un nuevo archivo. Después de crear el nuevo archivo, elimine el archivo anterior, que se realiza a través de fso.deletefile.
Estos 2 pasos son: cambiar el nombre del archivo y luego muévalo a un directorio más adecuado. Tenga en cuenta que también puede hacer más operaciones en archivos aquí, como editar contenido antes de escribir en un nuevo archivo.
FSO tiene algunas debilidades; por ejemplo, es difícil manejar archivos binarios, que incluyen documentos de Word, archivos en muchos formatos gráficos y algunos otros archivos. Sin embargo, aún puede manipular estos archivos de otras maneras: muévalos, eliminarlos, etc. Todo lo que no puedes hacer es abrirlos o escribirlos.
Otra limitación es el problema de la longitud del archivo. Cuando se lee y escribe algún contenido de inmediato, toda la información se almacena en la memoria: más contenido, más memoria consume. Esto ralentizará cada trabajo. Por lo tanto, si necesita operar archivos muy grandes, o grandes cantidades de archivos pequeños, considere dividir los archivos en piezas pequeñas y borrar la memoria con frecuencia. La incorporación de aplicaciones en los componentes del objeto COM también puede mejorar en gran medida la velocidad del programa.
Del mismo modo, no puede usar FSO para administrar los permisos y las propiedades de archivo y carpeta. Este método a menudo se usa en CGI y Perl, pero desafortunadamente, no hay una manera satisfactoria de implementarlo con FSO.
¿Qué más puedo hacer con FSO?
Hay muchas características excelentes en FSO, pero muchas personas no se dan cuenta. Estas funciones a menudo se descubren después de sentir que es difícil hacer algo.
Estas son algunas de estas características incómonas, pero muy geniales:
Características de FSO que rara vez se entienden
El método GetSpecialFolder devuelve la ruta a una carpeta específica de Windows: Directorio de instalación de Windows; Requerir el método GetAbSolutePathName Devuelve la ruta absoluta a la carpeta (similar a server.mappath) al almacenar datos temporales.
Por ejemplo, fso.getabsolutepathname (región) devolverá un resultado similar al siguiente: c: mydocsmyfolder óxido
El método GetExtensionName devuelve la extensión de la última parte de la ruta (por ejemplo: fso.getExtensionName (c: docs est.txt) devolverá txt) getBasename y getParentFolder Methods Devuelve la carpeta principal de la última parte de la ruta de la ruta
(Por ejemplo: FSO.GetParentFolder (C: DocsMyDocs) devolverá 'Docs') la propiedad de las unidades de unidades de uso de todas las unidades disponibles localmente para establecer una interfaz de usuario similar al navegador de recursos.
Al usar las funciones anteriores, es mejor crear un código para el manejo de errores. Porque si los parámetros requeridos no existen, se generará información problemática.
Resumir
Como hemos visto, FSO es muy útil, y lo que presentamos aquí es solo la punta del iceberg. Puede usar FSO para crear aplicaciones potentes y simplemente completar muchas tareas.