vbscript 中的FileSystemObject对象

FileSystemObject对象提供对计算机文件系统的访问。该对象包含了许多子对象,例如file对象、folder对象等等。它们可以通过FileSystemObject对象的丰富的方法获得。FileSystemObject对象在VBscript 和 JScript两种语言中是完全一样的,即有相同的属性方法,以及它们的语法形式。只是当它们与其它语言元素结合时,才因各自的语言不同表现出不同。在VBscript和JScript两种语言中创建FileSystemObject对象的方法也不同。

一 创建FileSystemObject对象

1 在VBscript中创建,方法如下:

Dim fso
Set fso = CreateObject( "Scripting.FileSystemObject ")

2 在JScript中创建,方法如下:

var fso = new ActiveXObject( "Scripting.FileSystemObject ");

在VBscript中使用CreateObject函数,语法
  CreateObject(servername.typename )
servername是应用程序名称,typename是要创建的对象类型或类。
在JScript中使用ActiveXObject对象,所以前面要有new关键字。语法
  new ActiveXObject(servername.typename)
ActiveXObject对象没有什么方法属性,其功能与VB的CreateObject函数一样,就是启用并返回 Automation 对象的引用。

二 FileSystemObject对象的属性

FileSystemObject对象只有一个属性Drives,它返回一个驱动器集合,包含了本地机器上所有可用的 Drive 对象。可移动媒体的驱动器不需要插入媒体就可以出现在 Drives 集合中。

目标任务1 显示可用的驱动器列表。

代码
function ShowDriveList(){
var fso,s,n,e,x;
fso = new ActiveXObject( "Scripting.FileSystemObject ");
e = new Enumerator(fso.Drives);
s = " ";
for (; !e.atEnd(); e.moveNext()){
 x = e.item();
 s = s + x.DriveLetter;
 s += " - ";
 if (x.DriveType == 3)
  n = x.ShareName;
 else if (x.IsReady)
    n = x.VolumeName;
    else
    n = "[驱动器未就绪] ";
 s += n + " <br> ";
}
return(s);
}
document.write (ShowDriveList());

代码注释

对象e是利用驱动器集合创建了一个枚举对象,它的每个元素是一个驱动器,因此可以使用Drive对象的属性方法。这里用到了atEnd()-列表结束,moveNext()-指向下一个驱动器,item()-得到当前驱动器,DriveLetter-驱动器字母,DriveType-驱动器类型(硬盘、CD-ROM等),ShareName(网络驱动器名),IsReady-驱动器是否就绪,VolumeName-磁盘卷号。

三 FileSystemObject对象的方法

FileSystemObject对象的方法非常丰富,本文仅给出各种方法的语法功能简表,然后重点介绍读写文本文件方法

Buildpath 方法在已存在路径后追加名称

copyFile 方法一个位置向另一个位置复制一个或多个文件

copyFolder 方法文件夹连同子文件夹从一个位置复制到另一个位置。

CreateFolder 方法创建文件夹。

CreateTextFile 方法建指定的文件名并返回一个TextStream对象,可使用这个对象对文件进行读写。

DeleteFile 方法删除一个或多个指定文件

DeleteFolder 方法删除一个或多个指定的文件夹及其内容

DriveExists 方法判断驱动器是否存在(T/F)

FileExists 方法判断文件是否存在(T/F)

FolderExists 方法判断文件夹是否存在(T/F)

GetAbsolutePathName 方法根据提供的路径说明返回明确完整的路径。

GetBaseName 方法返回字符串,该字符串包含路径中最后成分中的基本名称,不包含文件扩展名。

GetDrive 方法返回相应于指定路径中驱动器的 Drive 对象。

GetDriveName 方法根据指定路径返回包含驱动器名称的字符串。

GetExtensionName 方法返回包含路径中最后成分扩展名的字符串。

GetFile 方法根据指定的路径中的文件返回相应的 File 对象。

GetFileName 方法返回指定路径的最后成分,但指定的路径不能只是驱动器说明。

GetFolder 方法根据指定路径中的文件夹返回相应的 Folder 对象。

GetParentFolderName 方法根据指定路径中的最后成分返回包含其父文件名称的字符串。

GetSpecialFolder 方法返回指定的特殊文件夹对象。有window,system,temp。

GetTempName 方法返回一个随机产生的临时文件文件夹名,有助于执行那些需要临时文件文件夹的操作。

MoveFile 方法一个位置向另一个位置移动一个或多个文件

MoveFolder 方法一个位置向另一个位置移动一个或多个文件夹。

OpenTextFile 方法打开指定的文件并返回一个 TextStream 对象,可以通过这个对象对文件进行读、写或追加。

四 TextStream对象

文本流对象TextStream是FileSystemObject对象的子对象,利用它可以读写和使用文本文件。该对象需要使用FileSystemObject对象的OpenTextFile或CreateTextFile方法来打开或创建。下面都假定fso是已经创建的FileSystemObject对象。

在VB中,
Set MyFile = fso.CreateTextFile( "c:\testfile.txt ",True) ’创建,如文件存在就删除
Set f = fso.OpenTextFile( "c:\testfile.txt ",ForWriting,True) '打开

在JS中,

var a = fso.CreateTextFile( "c:\\testfile.txt ",true);
var a = fso.OpenTextFile( "c:\\testfile.txt ",ForAppending,false); //不创建新文件

注意,这在两种语言中没有什么差别,只是VB的语法规定创建对象要用Set语句,而JS中var也可用于说明对象。重要的是下面要讨论的打开与创建这两种方法功能和语法结构上的差别。

CreateTextFile方法的语法形式:

fso.CreateTextFile(Filename,[Overwrite],[Unicode])

Filename 包含文件路径名的字符串,可以是文件的全路径名,包括驱动器名和目录名,或者也可以只是文件名,如果只包含文件名的话,文件将被创建在站点的根目录下。

Overwrite 布尔量,设置成False时在创建新文件时不删除已存在的同名文件,并报告错误。该参数是可选的,如果没有赋值系统认为true,就删除已存在的同名文件。 

Unicode 可选参数。布尔值指明是否以Unicode或ASCII 文件格式创建文件。如果以Unicode 文件格式创建文件,则该值为True;如果以ASCII文件格式创建文件,则该值为False。如果省略此部分,则假定创建ASCII文件

OpenTextFile 方法的语法如下 :

fso.OpenTextFile(Filename,[IOmode],[Create],[Format])

Filename 必须的变量,同 CreateTextFile 的filename 。

IOmode 可选的常量,表示读写模式。取值为下列两个常数之一ForReading=1或ForAppending=8,如果mode为1,文件以只读方式打开,如果为8,则文件以追加的方式打开。 

Create 可选的布尔量,如果其值为 True,当文件不存在时就自动创建一个空的文件。如果为 False,就会在文件没找到时产生一个出错信息,其认值是False,建议将其设为True,以避免在打开文件时检查是否出错,就可能会中断运行。 

Format 可选,表示文件的格式。可以选择三种值 -2、-1、和0,分别对应于:系统缺省、unicode 和 ASCII。 

五 TextStream对象的属性

AtEndOfLine 本行是否结束?只读属性。如果文件指针位于当前行的行尾符之前,则返回true,否则返回 false。

AtEndOfStream 文件是否结束?只读如果文件指针正好位于文件结尾符,则返回true,否则返回false。

Column 只读属性,返回当前字符在当前行中的列号。如果已换行,但在其他任何字符之前,Column=1。

Line 只读属性,返回TextStream文件中当前行的行号。在文件刚打开但还没有写入任何字符之前Line=1。

六 TextStream对象的方法

Close() 关闭打开的TextStream 文件

Read(字符数)  从TextStream 文件中读取指定数量的字符,并返回由此得到的字符串。

ReadAll( ) 读取 TextStream 文件的全部内容并返回由此得到的字符串。

ReadLine() 从文件中读取一整行(一直到换行符,但不包括换行符),并返回由此得到的字符串。

Skip(字符数) 在读取TextStream 文件时跳过指定个数的字符。

SkipLine( )  在读取TextStream 文件时跳过下一行。

Write(string) 将给定的文本块写入到一个TextStream 文件中。

WriteBlankLines(行数) 将指定数量的空行(即只含有换行符)写入到一个TextStream 文件

WriteLine([string]) 向TextStream 文件中写入给定的字符串和一个换行符。


--------------------------------------------------------------------------------

目标任务2 在C盘根目录上生成一个文本文件Mytest.txt,其中包含自动写入的若干行。

function textwrite() {
var fs = new ActiveXObject( "Scripting.FileSystemObject ");
var Overwrite = true;
var ForAppending=8 ;
var Forwrite= -2 ;
var Unicode = false ;
var path = "c:\\ ";
var filename= "mytest.txt ";
var mytext = fs.CreateTextFile(path +filename,Overwrite) ;
var strings = new Array(5);
var D = new Date();
strings[0]= "本文件是由程序自动生成的 ";
strings[1]= "Today is " +D.getvarDate();
strings[2]= "今天是 " + D.getYear() + "年 " + D.getMonth()+ "月 " + D.getDay()+ "日 " ;
strings[3]= "现在时间是 " +D.getHours() + ": " + D.getMinutes();
strings[4]= "本文件的路径是 " + path +filename;
for (i=0 ;i <5;i++)
mytext.writeline(strings[i]) ;
mytext.close() ;
alert( "文件 " + filename + " 已经生成 ");
}

代码注释

创建文件mytext时,IOmode 用verwrite=true,如果文件存在时原有内容将被清除。

说明 在第一次运行本例程以前,先运行一次目标任务3,以便观看文件不存在的情形。运行时如果出现警告“可能不安全,是否允许运行?”,您尽管回答“是”。因为有写盘操作,这是这种不安全。

目标任务3 读出并显示目标任务2建立的文件

function textRead() {
var fs = new ActiveXObject( "Scripting.FileSystemObject ");
var Overwrite = true;
var ForAppending=8 ;
var ForReading= 1 ;
var Unicode = false ;
var path = "c:\\ ";
var filename= "mytest.txt ";
var mytext = fs.OpenTextFile(path +filename,ForReading,false) ;
var ss= " " ;
document.write(mytext.ReadAll()) ;
mytext.close() ;
mytext = fs.OpenTextFile(path +filename,false) ;
document.write ( " <p> 下面用ReadLine方法读出 <p> ");
ss = mytext.ReadLine() ;
document.write (ss+ " <br> ");
mytext.skipLine();
do
 document.write (mytext.ReadLine());
while( !mytext.AtEndOfStream);
mytext.close() ;
}

代码注释

打开文件使用了ForReading只读模式,建议读者把它改为ForAppending,多次运行它以观看效果。本例程两次读出全文。第一次用ReadAll,第二次是逐行读出。可以看出,READ方法不能得到换行符。因此,如果需要的话,您只能自行插入换行符。第一次读完后关闭文件。因为没有提供移动指针到头的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")