用FSO组件对文件操作(三)

二月 20, 2009 by FDS  
类别:ASP 已经有345次浏览

一,fso.GetFile
提取文件相应的 File 对象

1,getfile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
 
s = ”文件名称:” & f2.name & ”<br>”
s = s & ”文件短路径名:” & f2.shortPath & ”<br>”
s = s & ”文件物理地址:” & f2.Path & ”<br>”
s = s & ”文件属性:” & f2.Attributes & ”<br>”
s = s & ”文件大小: ” & f2.size & ”<br>”
s = s & ”文件类型: ” & f2.type & ”<br>”
s = s & ”文件创建时间: ” & f2.DateCreated & ”<br>”
s = s & ”最近访问时间: ” & f2.DateLastAccessed & ”<br>”
s = s & ”最近修改时间: ” & f2.DateLastModified
response.write(s)
%>

其效果正如右键某文件,看到的具体属性信息。
其中Attributes返回的数值“32”表示:(Archive)上次备份后已更改的文件。可读写。

其它值附录如下:

 
Normal        0      普通文件。               没有设置任何属性。 
ReadOnly      1      只读文件。               可读写。 
Hidden        2      隐藏文件。               可读写。 
System        4      系统文件。               可读写。 
Directory     16     文件夹或目录。           只读。 
Archive       32     上次备份后已更改的文件。 可读写。 
Alias         1024   链接或快捷方式。         只读。 
Compressed    2048   压缩文件。               只读。 

二,file.move
作用将指定的文件或文件夹从某位置移动到另一位置。其实该方法仍然属于fso.GetFile后的一个应用。

2,movefile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.Move ”C:\”
%>
<a href=”C:\”>查看下有没有</a>

简单的剪切粘贴的功能实现。

三,File.Copy
同样属于fso.GetFile后的一个应用。就只是单纯地拷贝文件到某位置。

3,copyfile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.Copy ”D:\”
%>
<a href=”D:\”>查看下有没有</a>

和本ASP页面同在目录下的cnbruce.txt文件依然存在。

四,file.Delete
很显然,就是直接删除文件了。

4,delfile.asp

<%
whichfile=Server.MapPath(“cnbruce.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set f1 = fso.CreateTextFile(whichfile,true)
f1.Write (“This is a test.My Name is cnbruce.”)
f1.Close
Set f2 = fso.GetFile(whichfile)
f2.move ”d:\”
Set f3 = fso.GetFile(“d:\cnbruce.txt”)
f3.delete 
%>
<a href=”d:\”>查看下是没有该文件的</a>

用FSO组件对文件操作(二)

二月 20, 2009 by FDS  
类别:ASP 已经有348次浏览

学会了FSO提取文件值,也学会了将信息输入到文件中,那下面就再来应用应用下。

不知道你有没有这样的习惯:看到一个文件,不自觉的右键选择用记事本打开。呵呵,几乎没有哪个文件是不可以的。所以现在,可以默认所有文件都是文本,只是后缀名不同而已;那么也就是说,现在可以提取任一文件的内容信息。OK,就来想象一下:

1,提取一个文件的路径(采用file按钮进行查找定位)
2,将该路径文件打开,并读取所有行
3,显示读取的信息

一、viewcode.asp

<%
Function ShowCode(filename) 
    Set fso = Server.CreateObject(“Scripting.FileSystemObject”)
    Set cnrs = fso.OpenTextFile(filename, 1)
    While Not cnrs.AtEndOfStream
        rsline = cnrs.ReadLine
        rsline = server.HTMLEncode(rsline)
        Response.Write(rsline & ”<br>”)
    Wend
end Function
%>

<form action=”viewcode.asp” method=”post”>
输入文件名<input type=”file” name=”filename”>
<input type=”submit” value=”查看源程序”>
</form>

<%
file=request.form(“filename”)
response.write (file & ”源程序如下<hr>”)
If trim(file)<> ”" then
  Call ShowCode(file)
End If
%>

以上程序调试时,可以选择html,asp页面,也可以打开任一应用程序等。

定义的ShowCode函数,主要作用是打开、读取并显示文件中所有信息内容。注意添加了server.HTMLEncode(rsline),针对含有标准HTML代码的文件。

显示文件中所有行即用一条件循环进行遍历显示了。
While Not cnrs.AtEndOfStream

Wend

接着,下面的这个例题具体就涉及open方法的问题了,还记得?正常情况之下打开文件是采用fso.OpenTextFile(“c:\testfile.txt”,1),参数1的作用是:以只读模式打开文件。不能对此文件进行写操作。如果现在已经存在一文件,需要进行追加写入,则该怎么办呢?简单,参数为8即可。

PS:这里还有一种读取的方法。

<%
whichfile=server.mappath(“test.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set txt = fso.OpenTextFile(whichfile,1)
rline = txt.ReadAll
rline=replace(Server.HtmlEncode(rline),Chr(13),”<br>”)
Response.Write rline
txt.Close
%>

这有什么用呢?呵呵,亚玛逊的网络故事接龙就是如此:能接龙就需要首先要显示原有故事,然后自己添加故事写入文件。这其中的写入文件最讲究的就是追加写入了。所以下面就可以实现。

二、story.asp

<%
If not request.Form(“NextLine”)=”" then
  Set fso=Server.CreateObject(“Scripting.FileSystemobject”)
  textfile1=Server.MapPath(“story.txt”)
  set cnrs=fso.OpenTextFile(textfile1,8)
  cnrs.WriteLine(Request.Form(“NextLine”))
  cnrs.Close
end if
%>
故事如下:
<%
Set fso=Server.CreateObject(“Scripting.FileSystemObject”)
textfile1=Server.MapPath(“story.txt”)
set cnrs=fso.OpenTextFile(textfile1,1)
while not cnrs.AtEndOfStream
  Response.Write ”&nbsp;” & cnrs.ReadLine
wend
cnrs.close
%>
<hr>
<form method=”post” action=”story.asp”>
请输入这个故事的新行:<input name=”NextLine” type=”text” size=”70″>
<input type=”submit” value=”提交”>
</form>

整个就是一很简单的读取信息和加入信息的混合利用,相信有了前面的基础看懂应该不成问题。当然还缺少个story.txt文件,里面写好故事开头就可以了。


再下面,继续来,该侧重点主要就是练习一些函数的使用技巧了。

1,instr函数:返回某字符串在另一字符串中第一次出现的位置。
比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

同样字母“B”的位置也就能确定。现在就来最关键的:提前字母“A”和“B”中间的值“110”。
还记得mid函数吗?mid函数的主要作用是:从字符串中返回指定数目的字符。
比如现在的“110”则应该是从字符串的第2位取得3个单位的值。

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

但设想一下:如果不是“110”,而是“1100”,那是不是要提取4位……这样就显出程序的不够完美。
所以继续思考:所提取的值,永远是在字母“A”后面的,且值也永远是在字母“A”和“B”之间的,那么只要分别提取出“A”、“B”的位置,则中间数值的起始位应是字母“A”位+1,中间数值的长度应是字母“B”位-字母“A”位-1
那么现在就可以让程序完美起来:


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

OK,那么现在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。
当然需要注意的就是“D”后面有几位怎么取呢?采用字符串总长度-字母D所在位置数就可以了。


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

用到现在,你也许确实学到了不少,但也许会提出疑问:这个放在FSO文件操作里有什么作用呢?
那下面才是我们的正题:用FSO进行简单的文本投票。

投票页面首要的就是显示各类项目的投票数,并相应赋于某个变量。然后判断本次投票的选相,相对应地将投票数值加1,完毕后再将所有值继续写入文本。

1,一个HTML表单页website.html
以做投票点击的平台。

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

2,接受表单页值的result.asp

<%
whichfile=server.mappath(“site.txt”)
set fso=createobject(“Scripting.FileSystemObject”)
set thisfile=fso.opentextfile(whichfile)
my_string=thisfile.readline

a_num = instr(my_string,”A”)
b_num = instr(my_string,”B”)
c_num = instr(my_string,”C”)
d_num = instr(my_string,”D”)
total_num = len(my_string)

a_value = mid(my_string,a_num+1,b_num-a_num-1)
b_value = mid(my_string,b_num+1,c_num-b_num-1)
c_value = mid(my_string,c_num+1,d_num-c_num-1)
d_value = mid(my_string,d_num+1,total_num-d_num)

select case request.form(“website”)
    case ”A”: avalue=a_value+1
    case ”B”: bvalue=b_value+1
    case ”C”: cvalue=c_value+1
    case ”D”: dvalue=d_value+1
end select

mynew_string=”A” & cstr(a_value) & ”B” & cstr(b_value) & ”C” & cstr(c_value) & ”D” & cstr(d_value)
set newfile=fso.createtextfile(whichfile)
newfile.writeLine(mynew_string)
newfile.close
set fso=nothing
%>
当前投票:<br>
cnbruce.com:<%=a_value%><br>
blueidea.com:<%=b_value%><br>
it356cn.com:<%=c_value%><br>
5d.cn:<%=d_value%><br>
<a href=”website.html”>返回继续</a>

有了上面函数的基础,看这个应该不是很难的

3,最后不要忘了的记数文件site.txt

用FSO组件对文件操作(一)

二月 20, 2009 by FDS  
类别:ASP 已经有268次浏览

FSO中除了可以对驱动器、文件夹的操作以外,功能最强大的就是对文件的操作了。它可以用来记数、内容管理、搜索还可生成动态HTML页面等等。

一、fso.OpenTextFile
无需多说,fso.OpenTextFile就是打开某个文件了,一般情况之下是打开的txt文本文件。所以首先我们先建立一个txt文件,然后通过FSO来读取其中的内容。

1,info.txt

 

name:cnbruce
sex:male
建立了该文件,下面再做个ASP页面,当然最好两个文件是在同一目录下。

2,opentxt.asp

 

<%
whichfile=server.mappath(“info.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set txt = fso.OpenTextFile(whichfile,1)
rline = txt.ReadLine
rline = rline & ”<br>” & txt.ReadLine
Response.Write rline
txt.Close
%> 

需要注意:无论是通过FSO打开驱动器、打开文件夹、打开文件,以及以后要接触到的打开数据库,都只能是打开绝对物理路径地址。但一般情况是上传到空间服务商那,不能很直接地了解到自己文件的所在位置,所以强烈推荐使用server.mappath方法:平台移植性强,适用性强。

CreateObject(“Scripting.FileSystemObject”)建立了FSO组件的连接,fso.OpenTextFile(whichfile,1)打开了info.txt该文件。参数“1”表示“ForReading:以只读方式打开文件。不能写这个文件。”,其他还有参数“2”表示“ForWriting:以写方式打开文件”,参数“8”表示“ForAppending:打开文件并从文件末尾开始写”。

打开了该文件,接下来是不是要显示文件中的内容?那就通过txt.ReadLine方法读取文本中的一整行,如果需要继续读取下一行,则继续使用txt.ReadLine方法。当然初此还有其它的读取方法,比如txt.Read(7)读取指定数量的字符,txt.ReadAll返回文本中的全部内容。

二、fso.CreateTextFile
如fso.CreateFolder建立文件夹般,fso.CreateTextFile则是建立文件了。

3,creattxt.asp

 

<%
whichfile=server.mappath(“info.txt”)
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set MyFile = fso.CreateTextFile(whichfile,True)
MyFile.WriteLine(“My Name Is CN-Bruce”)
MyFile.WriteLine(“My Sex Is Male”)
MyFile.Close
%>
<a href=”opentxt.asp”>查看内容</a> 

本次建立的文件是上一info.txt文件,fso.CreateTextFile(whichfile,True)其中的参数true即表示能覆盖已有文件。建立后需要向里面添加数据就采用“MyFile.WriteLine”了。

那现在就可以建立一个简单的文本记数器了,还记得以前的记数?:1,通过application、session、global.asa进行记数;2,通过Counter组件进行记数。但两者都有通病,就是不能保存,如果服务器重新启动后,是不是所有记数全部清空了呢:)那现在就可以使用文本来记录数据了,即使重启,下次提取的也还是该文件。

试验:文本计数器

首先建立一记数的文本文件counter.txt,设定初始值为“1”

4,counter.txt

 

1
接着是记数的ASP文件,功能是显示文本的记数,本做加1的记数,然后还要将新的记数写入文本文件。

5,txtcount.asp

 

<%
whichfile=server.mappath(“counter.txt”)
‘打开文件并将其值读取,最后关闭连接释放资源
set fso=createobject(“Scripting.FileSystemObject”)
set openfile=fso.opentextfile(whichfile,1)
visitors=openfile.readline
openfile.close
‘页面显示记数内容并做加1运算
response.write ”您是本页的第”&visitors&”位访客”
visitors=visitors+1
‘将新的数值添加写入到文本,最后关闭所有连接释放资源
set creatfile=fso.createtextfile(whichfile)
creatfile.writeLine(visitors)
creatfile.close
set fso=nothing
%> 

那根据这个可以继续地扩展内容:比如让记数用数字图片显示。当然前提就是你需要0-9的10张记数图片,并将此图片放于img文件夹中。
下为一增强的txtcount.asp内容代码

 

<%
whichfile=server.mappath(“counter.txt”)set fso=createobject(“Scripting.FileSystemObject”)
set openfile=fso.opentextfile(whichfile,1)
visitors=openfile.readline
openfile.close
CountLen=len(visitors)
response.write ”您是本页的第”

for i=1 to 6-countLen        ’表示最大值999999
 response.write ”<img src=img/0.gif></img>”
next 
for i=1 to countlen
 response.write ”<img src=img/” & mid(visitors,i,1) & ”.gif></img>”
next
response.write ”位访客”

visitors=visitors+1
set creatfile=fso.createtextfile(whichfile)
creatfile.writeLine(visitors)
creatfile.close
set fso=nothing
%>

 

本程序中采用的是mid函数,该函数的作用是返回某字符串中从第几位字符开始的几个字符。格式即为:Mid(string,start,length)

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

ASP的组件和对象

十二月 18, 2008 by FDS  
类别:ASP 已经有697次浏览

ActiveX 组件是建立强大的 Web 应用程序的关键。组件提供了用在脚本中执行任务的对象。ASP 同样提供了可在脚本中使用的内建对象。本主题将讨论如何使用组件提供的对象以及由 Active Server Pages 直接提供的内建对象。

关于组件
ActiveX 组件是一个文件,该文件包含执行某项或一组任务的代码。组件可以执行公用任务,这样就不必自己去创建执行这些任务的代码。例如,股票行情收报机组件可以在 Web 页上显示最新的股票报价。ASP 带有可以直接使用的组件,如 Database Access 组件。从第三方开发者处获得可以可选的组件。或者也可以编写自己的组件。

可以利用组件作为脚本和基于 Web 应用程序的基本构造块。只要知道如何访问组件提供的对象。即使是位编写脚本的新手,也可以在不了解组件运作方式的情况下编写脚本。总之,组件使您不用学习编程就能够编写强大的脚本。

如果您是位 Web 应用程序的开发者,可以通过编写组件封装商务逻辑。例如,可以编写组件来计算产品的销售税。然后可以在处理销售订单的脚本中调用这个组件。在订单的处理过程中独立计算税率可以在某地销售税改变的时候只更新组件,而无须更改整个处理过程。可以使用任何支持组件对象模型 (COM) 的语言来编写组件,如,C、C++、Java 或 Visual Basic。如果熟悉 COM 编程,ActiveX 组件就是 Automation 服务器。要在 Web 服务器上运行,ActiveX 组件不能有图形用户接口元素,如 Visual Basic 的 MsgBox 函数。

组件是可以重复使用的。在 Web 服务器上安装了组件后,就可以从 ASP 脚本、ISAPI 应用程序、服务器上的其他组件或由另一种 COM 兼容语言编写的程序中调用该组件。

生成组件对象的实例
组件是包含在动态链接库 (.dll) 或可执行文件 (.exe) 中的可执行代码。组件可以提供一个或多个对象以及对象的方法和属性。要使用组件提供的对象,请创建对象的实例并将这个新的实例分配变量名。使用 ASP 的 Server.CreateObject 方法可以创建对象的实例。接着,使用脚本语言的变量分配指令为对象实例命名。创建对象实例时,必须提供实例的注册名称 (PROGID)。对于由 ASP 提供的基本组件,可以从参考页中获得对象的 PROGID。

例如,ASP 的 Ad Rotator 组件在图形广告中任意循环。Ad Rotator 组件提供了一个被称为 Ad Rotator 对象,该对象的 PROGID 是 “MSWC.AdRotator”。要创建一个 Ad Rotator 对象的实例,请使用下列指令:

VBScript:

<% Set MyAds = Server.CreateObject(“MSWC.AdRotator”) %>
JScript:

<% var MyAds = Server.CreateObject(“MSWC.AdRotator”) %>
如果您已经非常熟悉 VBScript 或者 JScript ,将会注意到没有使用创建新对象实例的脚本语言函数,如 VBScript 中的 CreateObject 或 JScript 中的 New。您必须使用 ASP 的 Server.CreateObject 方法,否者 ASP 无法跟踪脚本语言中对象的使用。

使用 HTML <OBJECT> 标签同样可以创建对象实例。您必须为 RUNAT 属性提供服务器值,同时也要为将在脚本语言中使用的变量名提供 ID 属性组。使用注册名 (PROGID) 或注册号码 (CLSID) 可以识别该对象。下面的例子使用注册名 (PROGID) 创建 Ad Rotator 对象的实例:

<OBJECT RUNAT=Server ID=MyAd PROGID=”MSWC.AdRotator”></OBJECT>
下面的例子使用注册号码 (CLSID) 创建 Ad Rotator 对象的实例:

<OBJECT RUNAT=Server  ID=MyAd
CLASSID=”Clsid:1621F7C0-60AC-11CF-9427-444553540000″></OBJECT>
从 Java 类中创建一个对象
使用 Java 语言编写的 ActiveX 组件可作为 Java 类而不是 DLL 提交。要使用 Server.CreateObject 创建 Java 类对象的实例,必须使用 Javareg 程序将该类注册为 COM 组件。然后就能够以 PROGID 或 CLSID 使用 Server.CreateObject 了。

如果对象实例不需要访问 ASP 内建对象和参与事务,就可以使用由 Java 监视程序提供的更为简单的机制直接调用 Java 类。必须用 Microsoft virtual machine for Java 2.0(由该 Internet Information Server 和 Personal Web Server 的发布版提供)使用 Java 监视程序。

如果要使用监视程序实例化对象,就必须使用 VBScript 或者 JScript 的 GetObject 指令并以 java:classname 的形式提供 java 类的全名。下面这个关于 VBScript 的例子生成了 Java Date 对象的实例。

<%
Dim date
Set date = GetObject(“java:java.util.Date”)
%>

<p> The date is <%= date.toString() %>
通过调用 GetObject 而不是 Server.CreateObject 生成的对象不能访问 ASP 内建对象也不能参与事务处理。

使用 ASP 内建对象
ASP 提供执行任务的内建对象。例如,Request 对象存储从 HTML 表格参考。

调用 Object 方法
方法是可以在对象上所执行或使用对象执行的活动。调用方法的一般语法为:

Object.Method parameters

参数随着方法的不同而不同。

例如,可以按照下列的指令,使用 Response 内建对象的 Write 方法将信息发送到浏览器:

<% Response.Write “Hello World” %>
注意 一些脚本语言不支持 Object.Method语法。如果使用的语言不支持该语法,那么为了将该语言作为主脚本语言,就必须在注册表中加入条目。

设置对象属性
属性是描绘对象的特征值。属性定义对象的特征(如对象类型)或对象的状态(如启用或禁用)。常规语法为:

Object.Property

可以读取并设置属性值。对某些对象,还可以添加新属性。

例如,Ad Rotator 组件有 Border 属性,该属性指定广告是否有边框及边框的粗细。下面的表达式指明没有边框:

<% MyAds.Border = 0 %>
可以使用 ASP 输出指令显示某些属性的当前值。例如,如果浏览器仍然与服务器连接,下面的命令将返回 TRUE:

<%= Response.IsClientConnected %>