No ASP, FSO significa objeto de sistema de arquivos, que é um objeto de sistema de arquivos.
O sistema de arquivos de computador que vamos manipular refere -se a estar localizado no servidor da web. Portanto, verifique se você tem as permissões certas para isso. Idealmente, você pode configurar um servidor da Web em sua própria máquina para poder executar facilmente testes. Se estiver executando no Windows, experimente o PWS de servidor pessoal gratuito da Microsoft.
FSO Model Objects
Drive Object: Drive Objetos para acessar discos ou unidades de rede
FileSystemObject Object: Objetos do sistema de arquivos para acessar o sistema de arquivos do computador
Objeto de pasta: objeto de pasta para acessar todas as propriedades de uma pasta
Objeto Textstream: Objeto de fluxo de texto para acessar o conteúdo do arquivo
Você pode usar o objeto acima para fazer qualquer coisa no seu computador, incluindo atividades de sabotagem ;-( Portanto, tenha cuidado com o FSO. Em um ambiente da web, é muito importante armazenar informações, como informações do usuário, arquivos de log, etc. FSO Fornece uma maneira poderosa e simples de salvar dados com eficiência.
O FSO é alimentado pela Microsoft e ASP provavelmente não está mais disponível para sistemas que não sejam de Windows.
Como usar o FSO?
Para usar o FSO para executar todo o trabalho, primeiro crie um objeto, o código é assim:
| < %SET FSO = server.createObject (scripting.filesystemoBject) % > |
Isso cria FSO e atribui a variável FSO. Aqui podemos usar fso.method ou fso.property, que será visto no exemplo a seguir.
O modelo FSO está localizado em um arquivo DLL de tempo de execução de script fornecido pela Microsoft, que é scrrun.dll. Você pode fazer referência a este arquivo DLL em qualquer aplicativo, como MS Access, Word. Ou seja, não se limita apenas a aplicá -lo no ASP.
Aqui está uma breve lista dos métodos FSO:
| Método FSO | |
| CopyFile | Copie um ou mais arquivos para um novo caminho |
| CreateTextFile | Crie um arquivo e retorne um objeto Textstream |
| Deletefile | Exclua um arquivo |
| OpenExtfile | Abra o arquivo e retorne o objeto Textstream para leitura ou anexo |
Se você deseja conhecer os métodos e propriedades completos do FSO, consulte o Microsoft MSDN. Vamos ver alguns exemplos abaixo.
Suponha que você queira criar um livro de visitas simples, onde você possa criar um banco de dados em que armazena informações do usuário. No entanto, o uso do FSO para armazenar informações economizará tempo e dinheiro se o poder do banco de dados não for necessário. E alguns ISPs podem restringir os aplicativos de banco de dados na web.
Suponha que você coletou algumas informações do usuário em um formulário, aqui está um código HTML simples:
| < Html > < Corpo > < Formulário Ação = FormHandler.asp Método = Post > < Tipo de entrada = Tamanho do texto = 10 Nome = nome de usuário > < Tipo de entrada = Tamanho do texto = 10 Nome = Página inicial > < Tipo de entrada = Tamanho do texto = 10 Nome = email > < /forma > < /corpo > < /html > |
Vamos dar uma olhada no código que processa os formulários em formidler.asp:
| < % 'Obtenha informações do formulário strname = request.form (nome de usuário) strhomepage = request.form (página inicial) Stremail = request.form (email) 'Crie o objeto FSO Set fso = server.createObject (script.filesystemoBject) |
Até agora, nada de novo nada mais é do que obter o valor do campo do formulário e atribuir valores a variáveis. Uma parte interessante aparece abaixo - Escreva um arquivo:
| caminho = c: emp. est.txt Freading = 1, forwriting = 2, forappender = 3 'Abra o arquivo set file = fso.opentExtfile (caminho, forapinging, true) 'Escreva as informações para o arquivo file.write (strname) e vbcrlf file.write (strhomepage) e vbcrlf File.Write (Stremail) e Vbcrlf 'Fechar e limpar file.close Definir arquivo = nada Definir FSO = nada |
Lembre -se de que o método OpenTextFile retorna um objeto Textstream, que é outro objeto no modelo FSO. O objeto Textstream revela maneiras de manipular o conteúdo do arquivo, como escrever, ler e pular uma linha. O VB constante vbcrlf produz um caractere de nova linha.
True é definido no parâmetro de comando do OpenTextFile, que informa ao sistema que, se o arquivo não existir, crie -o. Se o arquivo não existir e o parâmetro verdadeiro não estiver definido, ocorre um erro.
Agora vá para o diretório C: EMP, Open test.txt, e você pode ver as seguintes informações:
| Nome do usuário Página inicial do usuário Email do usuário |
Obviamente, essas palavras podem ser substituídas por qualquer coisa inserida no formulário.
Agora, algumas informações do usuário são salvas em um arquivo, como um banco de dados simples. Suponha que haja um usuário que queira conhecer todos os visitantes e precisa separar as peças relevantes das informações registradas, porque não há coluna estruturada como um banco de dados.
Sabemos que no arquivo criado, a linha 1 é o nome de usuário, a linha 2 é a página inicial e a linha 3 é o endereço de e -mail deles. Os usuários registrados também armazenam suas informações nessa estrutura; portanto, cada três linhas conterão as informações de registro de um usuário. Sabendo disso, você pode escrever o código a seguir para exibir as informações:
| < % 'Crie o objeto FSO set fso = server.createObject (script.filesystemoBject) caminho = c: emp. est.txt 'Abra o arquivo set file = fso.opentExtfile (caminho, 1) < - para Leitura |
Em seguida, analise cada linha e formate os dados:
| faça até o arquivo.atendofstream Response.Write (Nome: & File.readline &) Response.write (página inicial: & file.readline &) Response.write (email: & file.readline & < p >) laço 'Fechar e limpar file.close Definir arquivo = nada Definir FSO = nada %> |
Esta é apenas uma saída muito simples, mas você pode incluir informações de formulário de tabela ou dhtml de acordo com a situação.
Se o arquivo tiver sido criado e escrito corretamente, o pequeno loop acima listará corretamente as informações de todos no banco de dados. O método ReadLine lê 1 linha de conteúdo até que uma nova linha seja encontrada e a chamada de leitura subsequente lerá a próxima linha. Atendofstream é uma propriedade de um objeto Textstream que nos diz quando encontramos a cauda de um arquivo.
Suponha que, por algum motivo, não estejamos formando o arquivo corretamente, se um usuário tiver apenas 2 linhas de informação em vez de 3 linhas, alguns erros ocorrerão. Nosso loop aqui recupera as próximas três linhas de informação no arquivo.
| Erro do objeto do servidor 'ASP 0177: 800A003E' |
Portanto, certifique -se de adicionar algum código de manuseio de erros para impedir que linhas desnecessárias sejam inseridas no arquivo ou as informações de linha necessárias estão faltando.
O conhecimento básico é discutido acima e, em seguida, a questão das permissões e permissões é discutida. O FSO é executado com a conta de usuário que a cria, em outras palavras, se alguém acessar sua página na Internet, essa conta da Internet cria FSO. Se você efetuar login no computador como administrador e fazer login na página, a conta do administrador cria o FSO. Isso é muito importante porque uma certa conta possui certas permissões e o FSO exige algumas permissões para executar totalmente as funções.
Contas da Internet (IUSER_MACHINENAME, MachineName é o nome do servidor) geralmente possui apenas permissões de leitura, o que significa que o usuário não poderá gravar no arquivo do livro de visitas. No entanto, existem várias opções para ignorar esse problema.
Primeiro de tudo, também é muito difícil, exigindo que os usuários efetuem login no servidor antes de preencher o livro de visitas. No entanto, o ponto principal do livro de visitas é coletar informações de usuários anônimos e, se o usuário for solicitado a fazer login, você deve saber quem eles são. Então, pule esta opção e veja o próximo.
O segundo método é criar um diretório ou arquivo, e o usuário do iuser_machineName possui permissões de gravação. Isso pode abrir algumas vulnerabilidades em segurança em potencial, porque quem conhece o diretório correto e possui algumas habilidades na Web pode preencher o conteúdo no servidor. Este é um tabu sério. Portanto, você deve confirmar que as informações desses diretórios escritas são salvos no local oculto e definir esses diretórios fora da estrutura do diretório da web o máximo possível (por exemplo, no Windows, este é um diretório que não está no diretório INETPUB).
Você pode pensar: ok, agora eu sei como escrever no arquivo. Mas podemos fazer mais? Vamos tentar criar uma função de pesquisa para o site.
A chave para construir um mecanismo de busca é a recursão. Principalmente, escreva um pedaço de código para pesquisar arquivos no diretório e, em seguida, execute o mesmo código em todos os loops de diretórios. Como não é possível determinar quantos subdiretos estão no total, o código de pesquisa deve ser executado repetidamente até que seja concluído. As chamadas recursivas são muito boas!
Vamos criar uma página de pesquisa. Suponha que um formulário HTML tenha sido criado, onde o usuário insere uma sequência de pesquisa.
| ObjFolder Dim Dim StrSearchText Dim objfso strSearchText = request.form (SearchText) < - A sequência de pesquisa 'Crie os objetos de FSO e pasta Set fso = server.createObject (script.filesystemoBject) Set objFolder = objfso.getFolder (server.mappath (/)) Pesquise ObjFolder |
O código acima simplesmente inicializa as variáveis, e a função de pesquisa executa a função de pesquisa, descrita da seguinte forma:
| Pesquisa de funções (ObjFolder) ObjsubFolder Dim 'Faça um loop através de todos os arquivos no atual pasta Para cada objfile em ObjFolder.Files Definir objTextStream = objfso.opentExtfile (objfile.path, 1) < - para leitura 'Leia o conteúdo do arquivo em um variável strFileContents = objTextStream.readall 'Se a sequência de pesquisa estiver no arquivo, então Escreva um link 'Para o arquivo Se Instr (1, StrfileContents, StrSearchText, 1) então Resposta.write < a href =/ & objfile.name & _ > & objfile.name & < /a >< Br > BolfileFound = True Final se objTextStream.close Próximo 'Aqui está a parte da recursão - para cada 'subpasta neste diretório, execute a função de pesquisa novamente Para cada objsubFolder em ObjFolder.SubFolders Pesquise ObjSubFolder Próximo Função final |
Para poder abrir um arquivo, o FSO requer o caminho real do arquivo, não o caminho da web. Por exemplo, é c: inetpubwwwroot empiindex.html, não www.enfused.com/temp/index.html ou /temp/index.html. Para converter o último para o primeiro, use Server.mappath (nome do arquivo), o nome do arquivo para representar o nome do caminho da web.
O código acima será executado em cada subdiretório da pasta no diretório inicial que você especificar, onde o diretório inicial refere -se ao diretório raiz da web/. Em seguida, basta abrir cada arquivo no diretório para ver se ele contém a sequência especificada.
Observe que, à medida que o número de arquivos e subdiretos aumenta, o tempo necessário para pesquisas aumentará. Se você precisar de um trabalho de pesquisa pesada, é aconselhado a receber outros métodos, como o Index Server Server Server Server.
Neste ponto, você pode ter um bom entendimento do FSO. Vamos dar uma olhada mais profunda para resolver problemas mais complexos.
Primeiro, você pode querer renomear o arquivo. Para acompanhar todos os documentos, convém renomeá -los para serem únicos para que eles possam ser facilmente distinguidos pelo sistema. Infelizmente, o FSO não permite operações simples de alteração de nome de arquivo, portanto, temos que modificá -lo.
| < % 'Crie o objeto FSO set fso = server.createObject (script.filesystemoBject) caminho = c: emp. est.txt strdate = substituir (data (), /,) strdir = c: inetpubwwwrootarticles e strdate strNewfilename = hora (agora) & _ & minuto (agora) & _ & & Segundo (agora) & .html 'Abra o arquivo antigo set file = fso.opentExtFile (Path, 1) < - para leitura strText = file.readall Definir arquivo = nada 'Verifique e/ou crie pasta Se não for FSO.Polderexists (Server.mappath (strdir)) então set f = fso.createfolder (server.mappath (strdir)) outro set f = fso.getFolder (server.mappath (strdir)) final se 'Crie e escreva um novo arquivo set file = fso.createTextFile (F.Path & & strNewFileName) file.write (strText) Definir F = nada file.close Definir arquivo = nada 'Exclua o arquivo antigo FSO.DeleteFile (Path & & RST (nome do arquivo) e i) ' limpar Definir FSO = nada %> |
A falta de recursos do FSO se tornou uma vantagem aqui e podemos executar 2 etapas por vez. Primeiro, abra o arquivo e leia o conteúdo do arquivo. Suponha que aqui você queira criar uma pasta exclusiva e um arquivo exclusivo para armazenar o artigo. No entanto, como o caminho para a pasta muda todos os dias, ela deve ser verificada primeiro se a pasta já existe e se não existir, crie -a. Isso é feito no snippet do FSO.Polherexists. Em seguida, siga esse caminho e crie um novo arquivo. Depois que o novo arquivo for criado, exclua o arquivo antigo, o que é feito através do fso.DeleteFile.
Essas duas etapas são: renomeie o arquivo e mova -o para um diretório mais adequado. Observe que você também pode fazer mais operações em arquivos aqui, como editar conteúdo antes de escrever em um novo arquivo.
O FSO tem algumas fraquezas - por exemplo, é difícil lidar com arquivos binários, que incluem documentos do Word, arquivos em muitos formatos gráficos e alguns outros arquivos. No entanto, você ainda pode manipular esses arquivos de outras maneiras - movê -los, excluí -los etc. Tudo o que você não pode fazer é abrir ou escrevê -los.
Outra limitação é o problema do comprimento do arquivo. Quando algum conteúdo é lido e escrito imediatamente, todas as informações são armazenadas na memória - quanto mais conteúdo, mais memória ele consome. Isso vai desacelerar todos os trabalhos. Portanto, se você precisar operar arquivos muito grandes ou um grande número de arquivos pequenos, considere dividir os arquivos em pedaços pequenos e limpar a memória com frequência. A incorporação de aplicativos nos componentes do objeto COM também pode melhorar bastante a velocidade do programa.
Da mesma forma, você não pode usar o FSO para gerenciar permissões e propriedades de arquivo e pasta. Esse método é frequentemente usado no CGI e Perl, mas, infelizmente, não há uma maneira satisfatória de implementá -lo com o FSO.
O que mais posso fazer com o FSO?
Existem muitas ótimas características no FSO, mas muitas pessoas não percebem isso. Essas funções são frequentemente descobertas depois que você sente que é difícil fazer alguma coisa.
Aqui estão alguns desses recursos incomuns, mas muito legais:
Recursos FSO que raramente são entendidos
O método GetSpecialFolder retorna o caminho para uma pasta Windows específica: diretório de instalação do Windows; Exigir o método getAbsolutepathname retorna o caminho absoluto para a pasta (semelhante ao server.mappath) ao armazenar dados temporários.
Por exemplo, fso.getabsolutepathname (região) retornará um resultado semelhante ao seguinte: C: MyDocsmyFolder Oxide
O método getExtensionName retorna a extensão da última parte do caminho (por exemplo: fso.geTextionName (c: docs est.txt) retornará txt) getBaseName e getParentFolder Methods retorna a pasta pai da última parte do caminho
(Por exemplo: fso.getParentFolder (c: docsmydocs) retornará 'documentos') A propriedade Retorna uma coleção de todas as unidades disponíveis localmente para estabelecer uma interface de usuário do tipo navegador de recursos.
Ao usar as funções acima, é melhor criar um código para manipulação de erros. Porque se os parâmetros necessários não existirem, informações problemáticas serão geradas.
Resumir
Como vimos, o FSO é muito útil e o que estamos introduzindo aqui é apenas a ponta do iceberg. Você pode usar o FSO para criar aplicativos poderosos e simplesmente concluir muitas tarefas.