在ASP中,FSO的意思是File System Object,即文件系统对象。
我们将要操纵的计算机文件系统,在这里是指位于web服务器之上。所以,确认你对此拥有合适的权限。理想情况下,你可以在自己的机器上建立一个web服务器,这样就能方便地进行测试。如果运行于Windows平台,请试一试微软公司的免费个人Web服务器PWS。
FSO 模型对象
Drive Object:驱动器对象 供存取磁盘或者网络驱动器
FileSystemObject Object:文件系统对象 供存取计算机的文件系统
Folder Object:文件夹对象 供存取文件夹的所有属性
TextStream Object:文本流对象 供存取文件内容
你可以使用上面的对象做计算机上的任何事情,也包括破坏活动 ;-( 所以,请小心使用FSO。在web环境中,存储信息是非常重要的,比如用户信息,日志文件,等等。FSO提供了一个强大且简单的方法高效率地保存数据。在这篇文章里面,着重讨论FileSystemObject和TextStream对象。
FSO由微软公司提供支持,对于非Windows系统,大概不能再使用ASP。
怎么样使用FSO?
为了使用FSO来执行所有的工作,首先要创建对象,代码就象下面这样:
< %
Set fso = Server.CreateObject("Scripting.FileSystemObject")
% >
这样就建立了FSO并且赋予变量fso,接着就可以使用熟悉的object.method语法来执行文件系统的操作〔查看Visual Basic文档,获取更多的关于对象和对象向导编程的知识〕。在这里,我们可以使用fso.method 或者 fso.property,这些将在下面的例子中看到。
FSO模型位于由微软提供的脚本运行时间DLL文件中,它是scrrun.dll。你可以在任何应用程序中引用这个DLL文件,比如MS Access,Word。 就是说,并非仅仅限制在ASP中应用它。
这里有一个简要的FSO方法列表:
FSO方法
CopyFile 拷贝一个或者多个文件到新路径
CreateTextFile 创建文件并且返回一个TextStream对象
DeleteFile 删除一个文件
OpenTextFile 打开文件并且返回TextStream对象,以便读取或者追加
如果想了解完整的FSO方法与属性,请查阅微软MSDN。下面来看几个例子。
假设你想创建一个简单的留言簿,你可以建立一个数据库,在其中存储用户的信息。然而,如果并不需要数据库的强大功能,使用FSO来存储信息将节省你的时间和金钱。并且,一些ISP也许限制了web上的数据库应用。
假设你在一个表单中收集了一些用户信息,这里是一个简单表单HTML代码:
< html>
< body>
< form action="formhandler.asp" method="post">
< input type="text" size="10" name="username">
< input type="text" size="10" name="homepage">
< input type="text" size="10" name="Email">
< /form>
< /body>
< /html>
再看看formhandler.asp中处理表单的代码:
< %
' Get form info
strName = Request.Form("username")
strHomePage = Request.Form("homepage")
strEmail = Request.Form("Email")
' create the fso object
Set fso = Server.CreateObject("Scripting.FileSystemObject")
迄今为止,还没有新鲜的东西,无非是获取表单域的值并且赋值到变量。下面出现了有趣的部分 - 写文件:
path = "c: emp est.txt"
ForReading = 1, ForWriting = 2, ForAppending = 3
' open the file
set file = fso.opentextfile(path, ForAppending, TRUE)
' write the info to the file
file.write(strName) & vbcrlf
file.write(strHomePage) & vbcrlf
file.write(strEmail) & vbcrlf
' close and clean up
file.close
set file = nothing
set fso = nothing
回想一下,OpenTextFile方法返回一个TextStream对象,它是FSO模型中的另外一个对象。TextStream对象揭示了操作文件内容的方法,比如写、读一行、跳过一行。VB常量vbcrlf产生一个换行符。
在OpentextFile的命令参数中定义了TRUE,这就告诉了系统,如果文件不存在,就创建它。如果文件不存在,并且没有定义TRUE参数,就会出错。
现在转到目录c: emp,打开test.txt,你可以看到如下的信息:
User's name
User's home page
User's email
当然,这些单词可以被输入在表单中的任何内容所替换。
现在已经有了一些用户信息保存在文件中,就像一个简单的数据库。假设有一个用户想了解所有的访问者,就要从登
记的信息中分离出相关部分,因为没有象数据库一样拥有结构化的列。
我们知道,在所创建的文件中,第1行是用户名,第2行是他们的主页,第3行是他们的电子邮件地址。随后登记的用
户也是按照这样的结构存储他们的信息,所以每3行将包含一个用户的登记信息。知道了这些,就可以编写下面的代码来显
示信息:
< %
' create the fso object
set fso = Server.Createobject("Scripting.FileSystemObject")
path = "c: emp est.txt"
' open the file
set file = fso.opentextfile(path, 1) < -- For
reading
接着,分析每一行,并且格式化数据:
do until file.AtEndOfStream
Response.write("Name: " & file.ReadLine & " ")
Response.write("Home Page: " & file.ReadLine & " ")
Response.write("Email: " & file.ReadLine & "< p>")
loop
' close and clean up
file.close
set file = nothing
set fso = nothing
%>
这里仅仅做了一个非常简单的输出,但是你可以根据情况包含表格或者DHTML表单信息。
如果已经正确地建立并写入了文件,上面的小小循环将合适地列出数据库中的每一个人的信息。ReadLine方法读取1
行内容,直到遇到换行符,随后的ReadLine调用将读取下一行。AtEndOfStream是TextStream对象的属性,它告诉我们何时
遇到文件的尾部。
假设由于某种原因,我们没有正确地形成文件,如果一个用户只有2行信息而不是3行,那么就会产生一些错误。我们
这里的循环取回文件中的下3行信息,如果没有3行多的信息,就将出现如下的错误信息:
Server object error 'ASP 0177 : 800a003e'
所以,一定要添加一些错误处理代码,以防文件中插入了多余的行或者少了必要的行信息。
上面讨论了基本知识,然后说说权限许可的问题。FSO以创建它的用户帐户权限运行,换言之,如果有人从Internet
上访问你的页面,那么这个internet帐户就创建FSO。如果以administrator的身份登录计算机,并且登录页面,那么
administrator帐户就创建了FSO。这是非常重要的,因为一定的帐户拥有一定的权限,并且FSO需要一些权限从而能完整的
执行功能。
internet帐户(IUSER_MachineName,MachineName是服务器的名字)一般只拥有读权限,这意味着用户将不能写入留
言簿文件。然而,有几个选择可以绕过这个问题。
首先,也是很困难的,是要求用户在填写留言簿前登录到服务器。然而,留言簿的要点是从匿名用户处收集信息,如
果要求用户登录,就必须要知道他们是谁。因此,跳过这个选择,看下一个。
第2个方法是创建一个目录或者文件,IUSER_MachineName用户对此有写权限。这样做可能开放了一些潜在的安全漏
洞,因为任何知道正确目录并具备一定web技巧的人就能在服务器上填充内容。这是一个很严重的禁忌。所以你必须确认在
隐藏的场所保存了这些可写目录的信息,并且尽可能地将这些目录设置在web目录结构以外(比如在Windows下,这是一个
不在inetpub目录下的一个目录)。
你也许想:好,现在我知道如何写入文件了。但能做到更多一些吗?下面来试一试为web站点建立一个搜索功能。
建立搜索引擎的关键是递归。主要地,编写一段代码搜索目录下的文件,然后对所有的目录循环执行同样的代码。因
为不能确定总共有多少个子目录,所以必须一遍又一遍地执行搜索代码,直到结束。递归调用非常好!
下面来创建搜索页面。假设已经建立了一个HTML表单,用户在其中输入一个搜索字符串。
Dim objFolder
Dim strSearchText
Dim objFSO
strSearchText = Request.Form("SearchText") < -- The search string
' create the FSO and Folder objects
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Server.MapPath("/"))
Search objFolder
上面的代码简单地初始化变量,Search函数执行搜索功能,描述如下:
Function Search(objFolder)
Dim objSubFolder
'loop through every file in the current
folder
For Each objFile in objFolder.Files
Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) < -- For Reading
'read the file's contents into a
variable
strFileContents = objTextStream.ReadAll
'if the search string is in the file, then
write a link
' to the file
If InStr(1, strFileContents, strSearchText, 1) then
Response.Write "< A HREF=""/" & objFile.Name & _
""">" & objFile.Name & "< /A>< BR>"
bolFileFound = True
End If
objTextStream.Close
Next
'Here's the recursion part - for each
' subfolder in this directory, run the Search function again
For Each objSubFolder in objFolder.SubFolders
Search objSubFolder
Next
End Function
为了能打开文件,FSO需要实际的文件路径,而不是web路径。比如,是c:inetpubwwwroot empindex.html, 而不是
www.enfused.com/temp/index.html 或者 /temp/index.html。 为了将后者转换为前者,使用Server.MapPath
("filename"), filename表示web路径名。
上面的代码将在你指定的初始目录下的文件夹的每一个子目录中执行,在这里,初始目录是指web根目录“/”。然后
就简单地打开目录下的每一个文件,看看其中是否包含指定的字符串,如果找到字符串就显示那个文件的链接。
注意,随着文件和子目录数量的增加,搜索花费的时间也将增加。如果需要繁重的搜索工作,建议你采取其他的方
法,比如微软公司的索引服务器Index Server。
到此,你对FSO可能已经有了很好的体会。让我们再深入研究一步,来解决更复杂的难题。
首先,你可能希望对文件改名。为了跟踪所有的文档,你将要重新命名它们以便唯一,这样就可以被系统容易地区
别。很不幸,FSO不允许简单的文件改名操作,所以我们不得不修改一下。
< %
' create the fso object
set fso = Server.Createobject("Scripting.FileSystemObject")
path = "c: emp est.txt"
strDate = Replace(Date(), "/", "")
strDir = "c:inetpubwwwrootarticles" & strDate
strNewFileName = Hour(Now) & "_" & Minute(Now) & "_" &
second(Now) & ".html"
' open the old file
set file = fso.opentextfile(path, 1) < -- For reading
strText = file.readall
set file = nothing
' check for and/or create folder
if not fso.folderexists(Server.MapPath(strDir)) then
set f = fso.CreateFolder(Server.MapPath(strDir))
else
set f = fso.GetFolder(Server.MapPath(strDir))
end if
' create and write new file
set file = fso.Createtextfile(f.path & "" & strNewFileName)
file.write(strText)
set f = nothing
file.close
set file = nothing
' delete the old file
fso.DeleteFile(path & "" & rst("FileName") & i)
' clean up
set fso = nothing
%>
FSO能力的不足在这里却成了优势,我们可以一次执行2步。首先,打开文件并读入文件的内容。假设这里要创建一个
唯一的文件夹和一个唯一的文件来存储文章。然而,因为文件夹的路径每天都将改变,所以必须首先检查是否文件夹已经
存在,如果不存在,就创建它。这在if not fso.folderexists代码段完成。然后,取得那个路径,创建一个新的文件。新
文件建立完成后,删除掉旧文件,这通过fso.DeleteFile来完成。
这2步就是:对文件改名,然后移动到一个更合适的目录下。注意,在这里还可以对文件进行更多地操作,比如在写
入新文件前进行一下内容的编辑。
FSO确实存在一些弱点 - 比如,它很难处理二进制文件,这包括Word文档、许多图形格式的文件和其他一些文件。然而你仍然可以用其他的方式操作这些文件 - 移动它们、删除它们,等等。你不能做的就是对它们进行打开或者写操作。
另外一个限制是对于文件长度的问题。当立刻读写一些内容时,所有的信息都存储在内存中 - 内容越多,消耗的内存就越大。这将使每个工作都变得慢起来。所以,如果需要操作非常大的文件,或者大量的小文件时,考虑将文件分割成小块,并且经常的清除内存。将应用程序融入进COM对象组件,也能大大地提高程序的速度。
同样,你也不能使用FSO来管理权限以及文件、文件夹的属性,执行安全加密的一个很好方法就是将前面提到的留言簿文件设置为只读,在需要时再设置为可写,然后再修改回来。这个方法经常在CGI和Perl使用,但是很不幸,还没有令人满意的方法来用FSO实现。
还能用FSO做什么?
在FSO中还有许多很棒的功能,但许多人没有意识到。这些功能常常是在你感到做某些事情很难后才发现的,这时你经常要感叹到:要是我早知道这个方法就好了!
下面列举一下这些不常用但是却非常酷的功能:
很少被了解的FSO功能
GetSpecialFolder Method 返回特定的Windows文件夹的路径: Windows安装目录;Windows系统目录;Windows临时目录 FSO.GetSpecialFolder([0, 1, or 2])
GetTempName Method 返回一个随机产生的文件或者目录名字,用于需要存储临时数据时
GetAbsolutePathName Method 返回文件夹的绝对路径(类似于Server.MapPath)。
比如,FSO.GetAbsolutePathName("region") 将返回类似于下面的结果:"c:mydocsmyfolder egion"
GetExtensionName Method 返回路径中最后部分的扩展名
(比如:FSO.GetExtensionName("c:docs est.txt") 将返回txt)
GetBaseName and GetParentFolder Methods 返回路径中最后部分的父文件夹
(比如:FSO.GetParentFolder ("c:docsmydocs") 将返回'docs')
Drives Property 返回所有本地可用驱动器的集合,用于建立资源浏览器样的用户接口。
使用上面的功能时,最好建立好出错处理的代码。因为如果需要的参数不存在,将会产生麻烦的信息。
总结
如我们所见,FSO非常有用,这里介绍的仅仅是冰山一角。你可以使用FSO建立功能强大的应用程序,简单地完成许多任务。
在 ASP 程序中,我们需要对文件进行操作,常常会利用到 FSO 组件,而很多人对此不是很了解,所以想到开设这个专题,用来收集 FSO 相关的介绍资料。欢迎大家补充并进行讨论。 FileSystemObject 对象模型
QUOTE
FileSystemObject (FSO) 对象模型,允许对大量的属性、方法和事件,使用较熟悉的 object.method 语法,来处理文件夹和文件。
使用这个基于对象的工具和:
HTML 来创建 Web 页 Windows Scripting Host 来为 Microsoft Windows 创建批文件 Script Control 来对用其他语言开发的应用程序提供编辑脚本的能力 因为在客户端使用 FSO 而引起重要的安全性问题,提供潜在地不受欢迎的对客户端本地文件系统的访问,假定本文档使用 FSO 对象模型,来创建由服务器端的 Internet Web 页执行的脚本。因为使用了服务器端,Internet Explorer 默认安全设置不允许客户端使用 FileSystemObject 对象。覆盖那些默认值可能会引起在本地计算机上不受欢迎的对其文件系统的访问,从而导致文件系统完整性的全部破坏,同时引起数据遗失或更糟的情况。
FSO 对象模型使服务器端的应用程序能创建、改变、移动和删除文件夹,或探测特定的文件夹是否存在,若存在,还可以找出有关文件夹的信息,如名称、被创建或最后一次修改的日期,等等。
FSO 对象模型还使文件处理变得很容易。在处理文件时,主要的目标是以易于访问的格式把数据存储在有效的空间和资源中。这就要求能够创建文件,插入和改变数据,以及输出(读取)数据。因为把数据存储在数据库中,如 Access 或 SQL 服务器,会给应用程序增加很大的开销,所以把数据存储在二进制或文本文件中可能是最有效的解决方案。可能不希望有该开销,或者数据访问要求可能不需要与功能完备的数据库相关联的所有额外功能。
包含在 Scripting 类型库 (Scrrun.dll) 中的 FSO 对象模型,支持通过 TextStream 对象来创建和操作文本文件。虽然还不支持二进制文件的创建或操作,但计划将来要支持二进制文件。 摘自 Windows 脚本手册。 相关资料: Windows 脚本手册 下载
--------------------
纯白色云娜音乐54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com |
|
|
|
不学无术 |
Apr 3 2005, 05:43 AM
|
论坛管理员
用户组: 管理员 发表总数: 3,801 注册日期: 1-March 03 来自: 天地人间 会员编号: 24
|
三种禁用 File System Object 组件的方法众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的。 第一种:用 RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll (win98路径)来注销该组件。此方法过于狠毒,属于同归于尽的方法,大家都没得用,是下招。 第二种:修改 Progid 的值,在 ASP 里调用组件的方式通常是 Set 对象名 = Server.CreateObject("Progid"),这时候我们就可以通过修改注册表中的 Progid 值从达到禁用该组件的方法。在 开始-运行中敲入 regedit,然后找到 HKEY_CLASSES_ROOT\Scripting.FileSystemObject,这时候我们就可以更改该Progid的值了,如改成 Scripting.FileSystemObject8 。这样在ASP页里就这样调用了:
CODE
<%@ Language=Vbscript%> <% Set Fs=Server.CreateObject("Scripting.FileSystemObject8") %>
(如果你前面没有调用过该组件的话,则无须重启,就可以看到效果了,否则请重启后看效果。) 这时候我们看看还是用原来的调用方法的结果:
CODE
<%@ Language=Vbscript%> <% Set Fs=Server.CreateObject("Scripting.FileSystemObject") %> 这时候的运行结果为:
QUOTE
服务器对象 错误 'ASP 0177 : 800401f3'
Server.CreateObject 失败
/aspimage/testfile2.asp, 行3
800401f3 (OK,达到我们的要求) 该方法由于本人迟了两步,结果就让别人抢着回答了,这样极大的刺激了我,结果就产生了第三种方法。 第三种:细心的高手们会想,既然能通过修改Progid值来禁用该组件,那 Clsid 是否也可以来修改呢?(OK,你想得和我一样)我们知道,除了 CreateObject 方法以外,也可以使用一般的<object>标注建立一个组件,我们可以在ASP里面使用 HTM L的 <object> 标注,以便在网页中加入一个组件。方法是:
CODE
<object runat=server id=fs1 scope=page progid="Scripting.FileSystemObj ect"></object> Runat 表示是在服务端执行,Scope 表示组件的生命周期,可以选用Session, Application 或 page (表示当前页面,也可缺省)。 这种写法对我们没用,还有一种写法是:
CODE
<object runat=server id=fs1 scope=page classid="clsid:clsid的值"></object> 我们也可以通过修改该Clsid的值而禁用该组件,如将注册表中 HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID 的值 0D43FE01-F093-11CF-8940-00A0C9054228 改成 0D43FE01-F093-11CF-8940-00A0C9054229 (改了最后面一位),这时候的写法为:
CODE
<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054229"></object> 看运行结果,没问题,OK。这时候我们再用:
CODE
<object runat=server id=fs1 scope=page classid="clsid:0D43FE01-F093-11 CF-8940-00A0C9054228"></object> 这时候就出错了。 新建一用户:iusr_domain IIS里设置对应站点的匿名用户 IUSR_DOMAIN CACLS: 设置目录权限 这样FSO可用,但不会影响别人。 作者:未知 来源:http://www.7880.com/Info/Article-a1be400.html
--------------------
纯白色云娜音乐54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com |
|
|
|
不学无术 |
Apr 3 2005, 06:08 AM
|
论坛管理员
用户组: 管理员 发表总数: 3,801 注册日期: 1-March 03 来自: 天地人间 会员编号: 24
|
使用 FSO 把文本信息导入数据库在开发WEB应用程序中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。在VB6中新提供了一套称为FSO(File System Object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。 一、FSO简介 FSO 对象模型包含以下几种对象: Drive 对象:允许收集系统物理或通过 LAN 与系统逻辑连接的硬盘、CD-ROM 等驱动器的可用空间、共享名等信息。 Folder 对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。 Files 对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。 TextStream 对象:允许创建和读写文本文件。 FileSystemObject 对象:提供一整套用于驱动器、文件夹和文件操作的方法,在功能上可以把它看作是上面几个对象的集合并且经常与它们配合使用。与该对象相关联的很多方法重复了前面四个对象中的方法,因此我们既可以通过 FileSystemObject 对象来对驱动器、文件夹和文件进行大多数操作,也可以通过对应的驱动器、文件夹或文件对象对这些组件进行操作。FSO 模型通过两种方法实现对同一对象的操作,其操作效果是相同的,提供这种冗余功能的目的是为了实现最大的编程灵活性。 在这篇文章中,我们将讲解利用 FSO 对象模型的 TextStream 对象对文本文件的操作。 (一) 用 FileSystemObject 来获取文本文件对象 1.创建一个 FileSystemObject 对象实例 要进行文件操作,首先必须创建一个 FileSystemObject 对象实例,用来创建或打开一个文件.创建一个 FileSystemObject 对象实例的具体格式为(以AFileSystemObject)为例:
CODE
Set AFileSystemObject = CreateObject("Scripting.FileSystemObjecct") 2.用 FileSystemObject 来获取文本文件对象 TextStream FileSystemObject 提供了两种方法用于获取文本文件对象 TextStream,其中用于创建文件的是 CreateTextFile,用于打开已存在文件的是 OpenTextFile,两种方法的返回结果都是一个 TextStream 对象的实例,利用该对象可以进行文件的具体操作。 ⑴ 创建一个新文件 创建新文件的方法的具体格式为(以AFileSystemObject为例):
CODE
AFilesystemObject.CreateTextFile(NewFileName, OverwriteExistingFile, IsUnicode) 其中: NewFileName 是一个string值,指定要建立的文件的名称,通常为文件的实际路径加文件名称,如 C:\webshare\aspsamp\filetest.txt 。 OverwriteExistingFile 是一个Boolean值,表示如果有同名文件存在时是否覆盖原来的文件。该参数可以省略,缺省时为 False,即不覆盖原来文件。 IsUnicode 是一个Boolean值,表示要建立的文件是ASCII文件还是Unicode文件,该参数可以省略,缺省时为 False,即为 ASCII 文件。 ⑵ 打开已存在的文件 打开已存在文件的方法的具体格式为(以AFileSystemObject为例):
CODE
AFilesystemObject.OpenTextFile(FileName, IOMode, create, format) 其中: FileName 是一个string值,指定要打开的文件的名称,通常为文件的实际路径加文件名称,C:\filepath\test.txt 。 IOMode 是常数值,表示打开文件的目的,ForReading(1)表示用于读取数据;ForAppending 表示用于增加数据.该参数可以省略,缺省时为 ForReading。 Create 是一个Boolean值,表示要打开的文件不存在时是否创建新文件, 该参数可以省略,缺省时为False,即不创建新文件。 Format 表示文件打开的方式.其可能的值及含义如下: TristateTrue:以 Unicode 的方式打开. TristateFalse:以 ASCII 的方式打开. TristateUseDefault:以系统默认的方式打开. 该参数可以省略,缺省时为 TristateFalse ,即ASCII方式。 (二).用 TextStream 进行文件操作 在建立或打开了文件之后,就可利用对象 TextStream 提供的方法进行文件的实际操作了。 1.用于写操作的方法有: ⑴ Write(string) 将由 string 指定的字符串写入到文件中。 ⑵ WriteLine(string) 在文件中写入由 string 指定的字符串,并写入一个换行字符。 参数string 可以省略,此时将在文件中插入一个空行。 ⑶ WriteBlankLines(NumOfLines) 在文件中插入若干空行,行数由 NumOfLines 指定。 2.用于读操作的方法和属性方法有: ⑴ AtEndOfLine 该属性是一个 Boolean 值,表示文件指针是否已指向当前行的行尾。 ⑵ AtEndOfStream 该属性是一个 Boolean 值,表示文件指针是否已指向文件尾。 ⑶ Column 该属性是一个整数值,表示文件指针在当前行中的位置。 ⑷ Line 该属性是一个整数值,表示文件指针所在行的行号。 ⑸ Read(NumOfCharacters) 该方法从文件当前位置开始,读入由NumOfCharacters数目指定的若干字符,返回一个字符串。 ⑹ ReadLine 该方法从文件当前位置开始,读入当前行的内容直到行尾,返回一个字符串。 ⑺ ReadAll 该方法从当前位置开始,读入整个文件的内容直到文件结束,返回一个字符串。 ⑻ Skip(NumOfCharacters) 该方法从文件当前位置开始,跳过由NumOfCharacters数目指定的若干字符。 ⑼ SKipLine 该方法从文件当前位置开始,跳过当前行的内容。 3.用于关闭文件的方法有: ⑴ Close 关闭已经建立或打开的文件。 (三)、下面就以一个实例来说明如何使用FSO来读取文本文件和如何保存到数据库: 1、 先创建一个读取文件路径的页面:file.htm
CODE
… <FORM METHOD=POST ACTION="upFile.asp" > <div align="center"> <br> <br> <br> <br> <input type="file" name="path" size="40"> <INPUT TYPE="submit" name="dr" value="导入信息"> </div> </FORM> … 2、 编写把获取到的文本值保存到数据库代码:upFile.asp
CODE
<%@Language="VBScript"%> <%Response.Buffer=true%> <!--#include file="adovbs.inc"--> <% strConn = "DSN=DataSourceName" Set Conn = Server.CreateObject("ADODB.Connection") Conn.open strConn Set ObjComm = Server.CreateObject("ADODB.Command") ObjComm.CommandText = "sp_AddMsg" ‘调用存储过程 ObjComm.CommandType = adCmdStoredProc Set ObjComm.ActiveConnection = Conn
''''''''''创建输入输出参数''''''''''''''''' Set ObjParamECom=ObjComm.CreateParameter("WC_ECompanyName",adVarchar,adParamInput,100) ObjComm.Parameters.Append ObjParamECom '@in_ECompanyName Varchar(50), --公司英文名称
Set ObjParamAddr=ObjComm.CreateParameter("WC_Address",adVarchar,adParamInput,200) ObjComm.Parameters.Append ObjParamAddr '@in_Address Varchar(50), --公司地址
Set ObjParamCity=ObjComm.CreateParameter("WC_City",adVarchar,adParamInput,100) ObjComm.Parameters.Append ObjParamCity '@in_City Varchar(50), --城市 … ''''''''''创建参数完毕'''''''''''''''''''' %> <% Dim AllText, strLine1, strLine2, strLine3 Dim strpath, fileurl
fileurl = ""
strpath=Trim(Request.form("path"))
fileurl=strpath
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ATextStream = FSO.OpenTextFile(fileurl, 1, false, TristateFalse)
'''''''''提取数据'''''''''''''''''''''''''''' Do While Not ATextStream.AtEndOfStream
''''''初始化变量'''''''''''''''' strLine1 = "" strLine2 = "" strLine3 = "" … ''''''''''''''''''''''''''''''' ATextStream.SkipLine ATextStream.Skip(11) strLine1 = Trim(ATextStream.ReadLine) ATextStream.Skip(11) strLine2 = Trim(ATextStream.ReadLine) ATextStream.Skip(5) strLine3 = Trim(ATextStream.ReadLine) … 'End if
''''''''''将变量加入参数集''''''''''''' ObjParamECom.Value = strLine1 ObjParamCCom.Value = strLine2 ObjParamAddr.Value = strLine3 …
''''''''''操作结束''''''''''''''''''''
ObjComm.Execute() '运行命令
Loop
Response.Write("<br>" & "导入库成功!<a href=dolist.html>[继续导入]</a><br>")
Set Conn = Nothing Set FSO = Nothing Set ATextStream = Nothing %> 附:存储过程sp_AddMsg代码
CODE
CREATE PROCEDURE dbo.sp_AddMsg --导入国外企业信息 (
@in_CompanyName Varchar(100), --公司名称 @in_Address Varchar(200), --公司地址 @in_City Varchar(100), --公司所在城市 … ) AS SET NOCOUNT ON BEGIN TRAN INSERT INTO Tb_WCLibrary( WC_CompanyName, WC_CCompanyName, WC_Address, … ) VALUES( @in_CompanyName, @in_CCompanyName, @in_Address, … ) IF @@ERROR <> 0 BEGIN ROLLBACK TRAN RETURN -1 END
COMMIT TRAN
RETURN 0
SET NOCOUNT OFF 至此,全文内容讲解结束,希望这篇文章能给读者带来一定的帮助。 作者:未知 来源:http://www.programfan.com/article/showarticle.asp?id=2328
--------------------
纯白色云娜音乐54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com |
|
|
|
不学无术 |
Apr 3 2005, 06:19 AM
|
论坛管理员
用户组: 管理员 发表总数: 3,801 注册日期: 1-March 03 来自: 天地人间 会员编号: 24
|
ASP 中取得图片宽度和高度的类(无组件)
CODE
<% Class ImgWHInfo '获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP Dim ASO Private Sub Class_Initialize Set ASO = Server.CreateObject("ADODB.Stream") ASO.Mode = 3 ASO.Type = 1 ASO.Open End Sub Private Sub Class_Terminate Err.Clear Set ASO = Nothing End Sub
Private Function Bin2Str(Bin) Dim I, Str For I=1 To LenB(Bin) clow = MidB(Bin, I, 1) If ASCB(clow) < 128 Then Str = Str & Chr(ASCB(clow)) Else I = I+1 If I <= LenB(Bin) Then Str = Str & Chr(ASCW(MidB(Bin, I, 1)&clow)) End If Next Bin2Str = Str End Function Private Function Num2Str(Num, Base, Lens) Dim Ret Ret = "" While(Num >= Base) Ret = (Num Mod Base) & Ret Num = (Num - Num Mod Base) / Base Wend Num2Str = Right(String(Lens,"0") & Num & Ret,Lens) End Function Private Function Str2Num(Str, Base) Dim Ret, I Ret = 0 For I=1 To Len(Str) Ret = Ret * base + Cint(Mid(Str, I, 1)) Next Str2Num = Ret End Function Private Function BinVal(Bin) Dim Ret, I Ret = 0 For I = LenB(Bin) To 1 Step -1 Ret = Ret * 256 + AscB(MidB(Bin, I, 1)) Next BinVal = Ret End Function Private Function BinVal2(Bin) Dim Ret, I Ret = 0 For I = 1 To LenB(Bin) Ret = Ret * 256 + AscB(MidB(Bin, I, 1)) Next BinVal2 = Ret End Function Private Function GetImageSize(filespec) Dim bFlag Dim Ret(3) ASO.LoadFromFile(filespec) bFlag = ASO.Read(3) Select Case Hex(binVal(bFlag)) Case "4E5089": ASO.Read(15) ret(0) = "PNG" ret(1) = BinVal2(ASO.Read(2)) ASO.Read(2) ret(2) = BinVal2(ASO.Read(2)) Case "464947": ASO.read(3) ret(0) = "gif" ret(1) = BinVal(ASO.Read(2)) ret(2) = BinVal(ASO.Read(2)) Case "535746": ASO.read(5) binData = ASO.Read(1) sConv = Num2Str(ascb(binData), 2 , 8) nBits = Str2Num(left(sConv, 5), 2) sConv = mid(sConv, 6) While(len(sConv) < nBits * 4) binData = ASO.Read(1) sConv = sConv&Num2Str(AscB(binData), 2 , 8) Wend ret(0) = "SWF" ret(1) = Int(Abs(Str2Num(Mid(sConv, 1 * nBits+1, nBits), 2) - Str2Num(Mid(sConv, 0 * nBits + 1, nBits), 2)) / 20) ret(2) = Int(Abs(Str2Num(Mid(sConv, 3 * nBits + 1, nBits), 2) - Str2Num(Mid(sConv, 2 * nBits + 1, nBits), 2)) / 20) Case "FFD8FF": Do Do : p1 = binVal(ASO.Read(1)) : Loop While p1 = 255 And Not ASO.EOS If p1 > 191 And p1 < 196 Then Exit Do Else ASO.read(binval2(ASO.Read(2)) - 2) Do : p1 = binVal(ASO.Read(1)) : Loop While p1 < 255 And Not ASO.EOS Loop While True ASO.Read(3) ret(0) = "JPG" ret(2) = binval2(ASO.Read(2)) ret(1) = binval2(ASO.Read(2)) Case Else: If left(Bin2Str(bFlag), 2) = "BM" Then ASO.Read(15) ret(0) = "BMP" ret(1) = binval(ASO.Read(4)) ret(2) = binval(ASO.Read(4)) Else ret(0) = "" End If End Select ret(3) = "width = """ & ret(1) & """ height = """ & ret(2) & """" getimagesize=ret End Function Public Function imgW(IMGPath) Dim FSO,IMGFile,FileExt,Arr Set FSO = Server.CreateObject("Scripting.FileSystemObject") If (FSO.FileExists(IMGPath)) Then Set IMGFile = FSO.GetFile(IMGPath) FileExt = FSO.GetExtensionName(IMGPath) Select Case FileExt Case "gif", "bmp", "jpg", "png": Arr = GetImageSize(IMGFile.Path) imgW = Arr(1) End Select Set IMGFile = Nothing Else imgW = 0 End If Set FSO = Nothing End Function Public Function imgH(IMGPath) Dim FSO, IMGFile, FileExt, Arr Set FSO = server.CreateObject("Scripting.FileSystemObject") If (FSO.FileExists(IMGPath)) Then Set IMGFile = FSO.GetFile(IMGPath) FileExt = FSO.GetExtensionName(IMGPath) Select Case FileExt Case "gif", "bmp", "jpg", "png": Arr = getImageSize(IMGFile.Path) imgH = Arr(2) End Select Set IMGFile = Nothing Else imgH = 0 End If Set FSO = Nothing End Function End Class
IMGPath = "Test.jpg"
Set PP = New ImgWHInfo W = PP.imgW(Server.Mappath(IMGPath)) H = PP.imgH(Server.Mappath(IMGPath)) Set pp = Nothing
Response.Write("<img src='" & IMGPath & "' border=0><br>宽:" & W & ";高:" & H) %> 作者:未知 来源:http://www.programfan.com/article/showarticle.asp?id=2664
--------------------
纯白色云娜音乐54ol.com 54ol.net h365.net 5icn.com 5itw.com 54zz.net uofan.com |
|
|
|
不学无术 |
Apr 3 2005, 06:29 AM
|
论坛管理员
用户组: 管理员 发表总数: 3,801 注册日期: 1-March 03 来自: 天地人间 会员编号: 24
|
使用 FSO 进行搜索 建立搜索引擎的关键是递归。主要地,编写一段代码搜索目录下的文件,然后对所有的目录循环执行同样的代码。因为不能确定总共有多少个子目录,所以必须一遍又一遍地执行搜索代码,直到结束。递归调用非常好! 下面来创建搜索页面。假设已经建立了一个HTML表单,用户在其中输入一个搜索字符串。
CODE
Dim objFolder Dim strSearchText Dim objFSO
strSearchText = Request.Form("SearchText") 'The search string 'create the FSO and Folder objects Set fso = Server.CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(Server.MapPath("/"))
Search objFolder 上面的代码简单地初始化变量,Search函数执行搜索功能,描述如下:
CODE
Function Search(objFolder) Dim objSubFolder
'loop through every file in the current folder For Each objFile in objFolder.Files Set objTextStream = objFSO.OpenTextFile(objFile.Path,1) < -- For Reading 'read the file‘s contents into a variable strFileContents = objTextStream.ReadAll
'if the search string is in the file, then write a link 'to the file
If InStr(1, strFileContents, strSearchText, 1) Then Response.Write("< A HREF=""/" & objFile.Name & """>" & objFile.Name & "< /A>< BR>") bolFileFound = True End If
objTextStream.Close Next
'Here is the recursion part - for each 'subfolder in this directory, run the Search function again
For Each objSubFolder In objFolder.SubFolders Search objSubFolder Next
End Function 为了能打开文件,FSO需要实际的文件路径,而不是web路径。比如,是c:\inetpub\wwwroot\empindex.htm,而不是 www.enfused.com/temp/index.html 或者 /temp/index.html。为了将后者转换为前者,使用 Server.MapPath("filename"),filename 表示 web 路径名。 上面的代码将在你指定的初始目录下的文件夹的每一个子目录中执行,在这里,初始目录是指web根目录“/”。然后就简单地打开目录下的每一个文件,看看其中是否包含指定的字符串,如果找到字符串就显示那个文件的链接。 注意,随着文件和子目录数量的增加,搜索花费的时间也将增加。如果需要繁重的搜索工作,建议你采取其他的方法,比如微软公司的索引服务器 Index Server。 |
W3 JMail 邮件组件是Dimac公司开发的用来完成邮件的发送、接收、加密和集群传输等工作的。w3 Jmail组件是国际最为流行的邮件组件之一,当今世界上绝大部分ASP程序员都在使用w3 Jmail组件构建邮件发送系统,那是因为w3 Jmail组件使用了新的内核技术,使其更加可靠和稳定。
一、下面向读者介绍w3 Jmail4.3组件的新特性:
1、 w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件;
2、 w3 Jmail4.3组件一共有十多个对象(后面将详细介绍)——这些对象中,绝大多数是针对Jmail.Message对象操作的;
3、 支持从POP3邮件服务器收取邮件;
4、 支持加密邮件的传输;
5、 快速发送,一次会话就完成邮件发送;
6、 还有一个特性就是可以使用w3 Jmail4.3组件的集群发送功能一次发送成千上万个邮件,还可以通过邮件合并(mailmerge)对象来个性化邮件。
二、Jmail邮件组件的安装及卸载:
1、 安装
跟使用别个组件一样,在使用Jmail邮件组件之前要先安装或注册该组件Jmail.dll。具体注册方法,是先把Jmail.dll文件拷贝到硬盘的某一目录下(如C:\Jmail\Jmail.dll),然后执行命令Regsvr32 C:\Jmail\Jmail.dll即可。
2、 卸载
卸载组件是安装组件的相反动作,可以使用参数/U来卸载已安装的组件,执行命令Regsvr32 /U Jmail.dll即可。
三、详细介绍W3 Jmail组件的对象(12个):
1、.POP3对象
属性(或方法)
说明
Connect(Username,Password,Server,Port)
连接POP3服务器,断口可选,默认110。
DeleteMessages()
从邮件服务器上删除所有邮件。
DeleteSingleMessage(MessageID)
从邮件服务器上删除由MessageID指定的邮件。
Disconnect()
关闭跟邮件服务器的连接。
DownloadHeaders()
从邮件服务器上读取所有的邮件头并传递给Messages集合。
DownloadMessages()
从邮件服务器读取所有邮件。
DownloadSingleHeader(MessageID)
从邮件服务器读取指定的邮件头并传递给Messages集合。
DownloadUnreadMessages()
从邮件服务器上读取所有未读邮件。
2、.Messages对象
属性(或方法)
说明
Clear()
清除集合中的所有内容,并不会删除邮件服务器上的任何邮件。
Count():Integer
返回集合中记录的数目:I=Messages.Count
Item(Index):Pointer
返回一个Message对象。Set oMsg=Messages.Item(0)
3、.Message对象
属性(或方法)
说明
AddAttachment(FileName,isInline,ContentType):String
给邮件添加一个文件型的附件。isInline设置为True时,添加的这个附件就是一个可嵌入的附件。
AddCustomAttachment(FileName,Data,isInline):String
给邮件添加一个自定义类型的附件。
AddHeader(Xheader,Value)
给邮件添加一个自定义邮件头X-Header。
AddNativeHeader(Header,Value)
给邮件添加一个邮件头。
AddRecipient(emailAddress,recipientName,PGPKey)
给邮件添加一个收件人。RecipientName和PGPKey是可选项,RecipientName为收件人姓名,PGPKey给邮件加密。
AddRecipientBCC(emailAddress,PGPKey)
添加一个邮件暗送人(BCC)地址。
AddRecipientCC(emailAddress,recipientName,PGPKey)
给邮件添加一个邮件抄送人(CC)地址。
AddURLAttachment(bstrURL,bstrAttachAs,isInline,bstrAuth):String
从指定的URL下载文件并添加为邮件附件。参数bstrAttachAs是用来更改添加为邮件附件的文件名。
AppendBodyFromFile(FileName)
清除邮件正文,并把指定文件的内容作为邮件正文。
AppendHTML(Text)
从邮件追加HTML格式正文,如例所示:Message. AppendHTML(“<H3>Hello Word</H3>”)
AppendText(Text)
向邮件添加文本正文。
Clear()
清除所有邮件消息,是成为一个空对象。
ClearAttachments()
清除附件列表。如:Message.ClearAttachments
ClearCustomHeaders()
清除所有自定义的邮件头。
ClearRecipients()
清除所有收件人地址列表。
Close()
释放Jmail与邮件服务器连接而使用的缓存(Cache)。
DecodeHeader(Header):String
输出一个邮件头消息。
ExtractEmailAddressesFromURL(bstrURL,bstrAuth)
从指定的网制(URL)读取并添加邮件列表。
GetMessageBodyFromURL(同上)
删除邮件正文并用指定的URL的内容代替。
KeyInformation(keyIdentifier):pointer
返回一个PGPKey对象。
LoadFromStream(Stream)
从数据库流读取数据,该数据库流必须符合RFC822标准。
LogCustomMessage(Message)
给Jmail日志文件添加自定义日志。此函数只有在logging属性被设置为True时有效。
Nq()
将邮件追加到发送队列等待发送。
ParseMessage(MessageSource)
解析一个邮件,数据流必须符合RFC822格式标准。
SaveToStream(Stream)
保存邮件到数据流,数据流必须符合RFC822格式标准。
Send(MailServer,enque):Boolean
发送邮件。邮件服务器是一个描述邮件服务器名称或地址的字符串,用户名和密码是可选项。当要发送认证邮件时使用格式为:用户名:密码@邮件服务器
SendToNewsGroup(ServerName,NewsGroup)
使用指定的NNTP服务器发送邮件到新闻组,多个邮件用“,”隔开。
About():string
设置一些附加信息。
Attachments():Pointer
返回邮件的附件集合。Set Attachments=Message.Attachments
Body():String
返回邮件正文。Response.Write (Message.Body)
BodyText():String
返回全部的文本正文。Response.Write (Message.BodyText)
Charset():String
设置邮件使用的字符集。默认为US-ASCII,支持中文则设置为GB2312。
ContentTransferEncoding():String
设置邮件编码。默认为:Quoted-Printable.
ContentType():string
返回正文类型。
Date():Date
返回邮件发送时间。
DeferredDelivery():Date
设置邮件定时发送。
Encoding():String
设置附件的默认编码:Base64或Quoted-Printable
EncryptAttachments():Boolean
设置为True时,所有的附件都被加密,当然是编译器可用的情况下。其默认值为True.
ErrorCode():Integer
如果message.silent设置为True时,该函数包含错误号。
ErroeMessage():String
如果message.silent设置为True时,该函数包含错误描述。
ErroeSource():String
如果message.silent设置为True时,该函数包含错误来源。
From():String
返回或设置发件人的Email地址。
FromName():String
返回或设置发件人的名字。
HtmlBody():String
返回或设置邮件正文的HTML部分。
ISOEncodeHeaders():Boolean
邮件头是否使用iso-8859-1编码。(默认为True)
Log():String
当Logging为True时,该函数返回创建的日志。
Logging():Boolean
是否启用日志。Message.Logging=True时,启用日志。
MailData():String
返回邮件的源代码。
MailDomain():String
设置发送邮件时使用的邮件服务器。
MailServerPassWord():String
当邮件服务器使用SMTP发信认证时,该函数设置登录密码。
MailServerUserName():String
当邮件服务器使用SMTP发信认证时,该函数设置登录帐号。
MimeVersion():String
声明Mime版本,默认为1.0。
MsPickupdirectory():String
指定MS SMTP服务的Pickup文件夹的位置。
PGPEncrypt():Boolean
当邮件是使用PGP发送时并该属性被设置为True时,该邮件将被自动加密。
PGPSign():Boolean
当邮件是使用PGP发送时并该属性被设置为True时,该邮件将被自动签名。
Priority():Byte
设置邮件的优先级:1、2和3
Recipients():Pointer
返回收件人集合。
RecipientsString():String
返回收件人集合(只读)。
ReplyTo():String
指定一个回复地址。
Silent():Boolean
当设置为True时,Send()方法就会忽略错误并不将错误信息返回给操作系统。
SimpleLayout():Boolean
当设置为True时,发信时Jmail不会添加邮件头到邮件里。
Size():Integer
返回邮件的总字节数。
Subject():String
设置邮件标题。
Text():string
返回完整的邮件内容。
Version():String
返回Jmal的版本信息。
4、 Headers对象
属性(或方法)
描述
GetHeader(HeaderName):String
返回指定的邮件头的值。
Text():String
返回所有的邮件头的值。
5、 Recipients对象
属性(或方法)
描述
Add(Value)
追加一个收件人到集合中。
Clear()
清除集合中的全部记录。
Count():Integer
返回集合中收件人的总数。
Item(Index):Pointer
返回集合中的一个指定的收件人。
6、 Recipient对象
属性(或方法)
描述
New(Name,Email,recipientType):Pointer
创建一个可以添加到收件人集合中Recipients的收件人。
Email():String
返回收件人的邮件。
Name():String
返回收件人的姓名。
ReType():Integer
返回收件人模式(收件人To=0,抄送CC=1,暗送BCC=2)。
7、 Attachments对象
属性(或方法)
描述
Add(Attachment)
添加一个附件到集合。
Clear()
清除集合中的全部附件。
Count():Integer
返回集合中附件的总数。
Item(Index):Pointer
返回集合中指定的附件。
今天,我学会了用jmail 发邮件!!!但愿我每天都在成长中!呵呵
方法是:
1,下载jmail
2,安装,
3,找到dll拷贝到同一级目录下
4,注册,普通的,大多数dll无需注册,只需要放在与exe相同的目录下就可以了。不推荐放在
system之类的目录中。
只有com服务器的dll需要注册(类似ocx)。一般不需要参数
regsvr32 abc.dll
反注册:
revsvr32 /u abc.dll
5,最后:
<%
Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象
jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值j
jmail.logging = true '启用邮件日志
jmail.Charset = "GB2312" '邮件的文字编码为国标
jmail.ContentType = "text/html" '邮件的格式为HTML格式
jmail.AddRecipient "ntlizheng@eyou.com" '邮件收件人的地址
jmail.From = "ntlizheng@126.com" '发件人的E-MAIL地址
jmail.MailServerUserName = "ntlizheng" '登录邮件服务器所需的用户名
jmail.MailServerPassword = "#######" '登录邮件服务器所需的密码
jmail.Subject = "Mail Subjectntlizheng" '邮件的标题
jmail.Body = "Mail dddddBody" '邮件的内容
'jmail.Prority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Send("smtp.126.com") '执行邮件发送(通过邮件服务器地址)
jmail.Close() '关闭对象
response.write "______________here"
response.end
%>
6:成功了,呵呵,好爽啊!
9:57:33
呵呵,一个新单词:
简明英汉词典
|
encryption |
|
|
|
编密码 |
|
Encryption |
|
|
|
[计] 加密术,密码术
|
mass |
|
|
|
n. |
|
块, 大多数, 质量, 群众, 大量 |
|
adj. |
|
群众的, 大规模的, 集中的 |
|
vt. |
|
使集合 |
|
vi. |
|
聚集 | |