1. 程式人生 > >js 操作磁碟檔案--使用fso

js 操作磁碟檔案--使用fso

<html>   
<head>   
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">   <script>   
var filesList = new Array();   
var filesIndex = 0;  
var fso = new ActiveXObject("Scripting.FileSystemObject");  
function searchFilesList(filePath){   
    var f = fso.GetFolder(filePath);   
    // 遍歷目錄       
	var fk = new Enumerator(f.SubFolders);     
	for (; !fk.atEnd(); fk.moveNext()) {          
	filesList[filesIndex++] = fk.item();   
        searchFilesList(fk.item());   
    }   
    // 遍歷目錄檔案      
	var fc = new Enumerator(f.files);    
	for (; !fc.atEnd(); fc.moveNext()) {  
	//alert(fc.item());
	var file = fso.GetFile(fc.item());  
	//alert(file);
	//alert(file.Name);
	//alert(file.Size);
	filesList[filesIndex++] = fc.item();   
    }   
}   
function searchFiles(){   
    searchFilesList(fixfolder.value);   
    // 迴圈資訊資訊      
	for (var i=0; i<filesList.length; i++){   
	textarea.innerHTML += filesList[i]+"<br>";       }   
}   

function writeFile(){
 var file = fso.OpenTextFile("e:\a.txt", 2, true) ;
 file.write("aaa\r\n");
 file.write("bbb");
 file.close();
}   </script>   
</head>   
<body bgcolor="#FFFFFF">   指定資料夾:<input type="text" name="fixfolder" value ="D:\新建資料夾\twain\JTwain-eval">   <input type="button" value ="搜尋" onclick="searchFiles()"> <input type="button" value ="寫檔案" onclick="writeFile()">  <table >   
<tr>   
<td id = "textarea">     
</td>   
</tr>   
</table>   
  
</body>   
</html>  


附《FileSystemObject用法大全》轉自百度文庫

FileSystemObject

檔案系統物件FSO的英文全稱是File System Object ,這種物件模型提出了有別於傳統的檔案操作語句處理檔案和資料夾的方法。通過採用object.method這種在面向物件程式設計中廣泛使用的語法,將一系列操作檔案和資料夾的動作通過呼叫物件本身的屬性直接實現。

FSO(File SystemObject)物件模型

  從 Visual Basic的第一版至今,VB中有關檔案的處理都是通過使用 OpenWrite以及其它一些相關的語句和函式來實現的。隨著軟體技術的不斷髮展,加上面向物件程式設計概念的日臻成熟,這些檔案操作語句已經不能適應軟體不斷增加的複雜程度的需要了。因此,從

VB6.0開始,微軟提出了一個全新的檔案系統物件FSO

一、FSO物件模型

  不僅可以象使用傳統檔案操作語句那樣實現檔案的建立、改變、移動和刪除,而且可以檢測是否存在指定的資料夾,如果存在,那麼,這個資料夾又位於磁碟上的什麼位置。更令人高興的是FSO物件模型還可以獲取關於檔案和資料夾的資訊,如名稱、建立日期或最近修改日期等以及當前系統中使用的驅動器的資訊,如驅動器的種類是CDROM還是可移動磁碟,當前磁碟的剩餘空間還有多少。而以前要獲取這些資訊必須通過呼叫Windows API函式集中的相應函式才能實現。

FSO物件模型包含

  在Scripting型別庫 (Scrrun.Dll)中,它同時包含了

DriveFolderFileFileSystemObjectTextStream五個物件。其中Drive用來收集驅動器的資訊,如可用磁碟空間或驅動器的型別;Folder用於建立、刪除或移動資料夾,同時可以進行向系統查詢資料夾的路徑等操作;File的基本操作和Folder基本相同,所不同的是Files的操作主要是針對磁碟上的檔案進行的;FileSystemObjectFSO物件模型中最主要物件,它提供了一套完整的可用於建立、刪除檔案和資料夾,收集驅動器、資料夾、檔案相關資訊的方法。需要注意的是,FSO物件模型提供的方法是冗餘的,也就是說在實際使用中,FSO物件模型中包含的不同物件的不同方法進行的卻是同樣的操作,而且FileSystemObject物件的方法直接作用於其餘物件,所以在後面的文章中並沒有單獨提到FileSystemObject物件,千萬不要以為沒有提到就不重要,事實上FileSystemObject物件在整個FSO物件模型中無處不在;最後的TextStream物件則是用來完成對檔案的讀寫操作的。

  在初步瞭解了FSO物件模型之後,下面我們通過實際的程式碼對不同的物件進行進一步的闡述。

二、FSO物件模型的應用在VB中的應用

(一)建立FSO物件模型

  由於FSO物件包含在Scripting型別庫 (Scrrun.Dll)中,所以在使用前首先需要在在工程中引用這個檔案,單擊工程引用,然後在引用對話方塊中選中“Microsoft Scripting Runtime”前的複選框,然後單擊確定

  要建立FSO物件可以採用兩種方法,一種是將一個變數宣告為FSO物件型別:Dim fsoTest As New FileSystemObject;另一種是通過CreateObject方法建立一個FSO物件:Set fsoTest = CreateObject(“Scripting.FileSystemObject")。在實際使用中具體採用哪種宣告方法,可根據個人的使用習慣而定。

  完成了FSO物件模型的建立之後,就可以利用建立的物件模型的方法訪問下屬各個物件的屬性來獲取所需資訊或進行相關操作了,具體的方法在下面結合各個物件分別講述。

(二)Drive物件

  上面已經提到Drive物件是用來獲取當前系統中各個驅動器的資訊的。由於Drive物件沒有方法,其應用都是通過屬性表現出來的,所以我們必須熟悉Drive物件的屬性:

AvailableSpace:返回在指定的驅動器或網路共享上的使用者可用的空間容量。

DriveLetter:返回某個指定本地驅動器或網路驅動器的字母,這個屬性是隻讀的。

DriveType:返回指定驅動器的磁碟型別。

FileSystem返回指定驅動器使用的檔案系統型別。

FreeSpace:返回指定驅動器上或共享驅動器可用的磁碟空間,這個屬性是隻讀的。

IsReady:確定指定的驅動器是否準備好。

Path:返回指定檔案、資料夾、或驅動器的路徑。

RootFolder:返回一個 Folder物件,該物件表示一個指定驅動器的根資料夾。只讀屬性。

SerialNumber:返回用於唯一標識磁碟卷標的十進位制序列號。

ShareName:返回指定驅動器的網路共享名

TotalSize:以位元組為單位,返回驅動器或網路共享的總空間大小。

VolumeName:設定或返回指定驅動器的卷標名。

  從上面的屬性可以看到Drive物件基本上包含了日常操作所需的全部的驅動器資訊,因此在使用中是非常方便的。下面通過一個例項講述Drive物件的使用。首先在VB中建立一個工程,然後新增一個命令按鈕,將其Caption設定為“TestDrive”,然後在click事件中加入以下程式碼:

Dim fsoTest As New FileSystemObject

Dim drv1 As Drive, sReturn As String

Set drv1 = fsoTest.GetDrive(“C:\")

sReturn = “Drive " & “C:\" & vbCrLf

sReturn = sReturn & “VolumeName" & drv1.VolumeName &vbCrLf

sReturn = sReturn & “Total Space: " &FormatNumber(drv1.TotalSize / 1024, 0)

sReturn = sReturn & “Kb" & vbCrLf

sReturn = sReturn & “Free Space: " &FormatNumber(drv1.FreeSpace / 1024, 0)

sReturn = sReturn &“Kb" & vbCrLf

sReturn = sReturn &“FileSystem:" & drv1.FileSystem &vbCrLf

MsgBox sReturn

  其中GetDrive方法返回一個與指定路徑中的驅動器相對應的 Drive 物件。該方法的語法格式為object.GetDrive drivespecobject是一個FSO物件的名稱,drivespec用於指定驅動器的名稱。

  按F5執行上述程式碼,按下TestDrive按鈕就會彈出一個訊息框顯示C盤的資訊。

(三)Folder物件

  在FSO物件模型中,提供了豐富的有關資料夾操作的方法,這些方法分別是:

FileSystemObject物件有關資料夾的方法:

CreateFolder:建立一個資料夾

DeleteFolder:刪除一個資料夾

MoveFolder:移動一個資料夾

CopyFolder:複製一個資料夾

FolderExists查詢一個資料夾是否在驅動器上

GetFolder:獲得已有Folder物件的一個例項

GetParentFolderName找出一個資料夾的父資料夾的名稱。

GetSpecialFolder找出系統資料夾的路徑。

Folder物件的方法:

Delete:刪除一個資料夾

Move:移動一個資料夾

Copy:複製一個資料夾。

Name:檢索資料夾的名稱。

  在此需要強調一點,前面我們曾經提到過FSO物件模型包含的方法是冗餘的,所以Folder物件的DeleteMoveCopy方法和FileSystemObject物件的DeleteFolderMoveFolderCopyFolder方法實際上是相同的,因此在實際使用中可以任選其中的一種。和Drive物件一樣,下面通過例項演示Folder物件的應用。在VB下新建一個工程,然後在上面新增三個命令按鈕,然後在Form1的通用部分加入以下程式碼:

Option Explicit

Dim fsoTest As New FileSystemObject

Dim folder1 As Folder

  並且分別在三個命令按鈕的click事件輸入以下程式碼:

Private Sub CmdCreate_Click()

'獲取 Folder物件。

Set folder1 = fsoTest.GetFolder(“C:")

'建立資料夾

fsoTest.CreateFolder (“C:\Test")

MsgBox “folder C:\Test has created"

End Sub

Private Sub CmdDelete_Click()

'獲取 Drive物件。

Set folder1 = fsoTest.GetFolder(“C:")

'刪除資料夾

fsoTest.DeleteFolder (“C:\Test")

MsgBox“folder C:\Test has deleted"

End Sub

Private Sub CmdGetPro_Click()

'獲取資料夾的有關資訊

Dim sReturn As String

Set folder1 = fsoTest.GetFolder(“C:\Windows")

'sReturn = “The folder's Attributes is " &folder1.Attributes & vbCrLf

'獲取最近一次訪問的時間

sReturn = sReturn & “The folder's last access timeis " & folder1.DateLastAccessed & vbCrLf

'獲取最後一次修改的時間

sReturn = sReturn & “The folder's last modifytime is " & folder1.DateLastModified & vbCrLf

'獲取資料夾的大小

sReturn = sReturn & “The folder's size is "& FormatNumber(folder1.Size / 1024, 0)

sReturn = sReturn & “Kb" & vbCrLf

'判斷檔案或資料夾型別

sReturn = sReturn & “The type is " &folder1.Type & vbCrLf

MsgBox sReturn

End Sub

  上述程式碼中提到的CreateFolder方法的語法形式為object.CreateFolder(foldername)foldername指定了要建立的資料夾的名稱,而DeleteFolder方法的語法形式為object.DeleteFolderfolderspec[,force],其中,folderspec用來指定要刪除的資料夾的名稱,force是一個可選的布林型引數,如果希望刪除只讀屬性的資料夾則將該值設為TRUE,預設為FALSE。至於程式碼中用到的 Folder 物件的屬性限於篇幅,就不詳細介紹了,讀者可參考VB文件中的相關內容。

(四)File物件和TextStream物件

  由於有關File物件的複製,刪除,移動等操作和Folder物件類似,所以這部分內容就不再重複。這裡主要講述利用File物件和TextStream物件操作文字檔案。

  通常對文字檔案的操作包括在文字檔案中建立資料,在文字檔案中新增資料,刪除文字檔案的資料等操作。這些操作都可以通過File物件和FileSystemObject物件的相關方法完成。不過在使用之前,首先要建立一個文字檔案,這可以通過三種方法完成。一種方法是使用FileSystemObject物件的 CreateTextFile 方法。要建立一個空文字檔案,可以用以下語句:

Dim fsoTest As New FileSystemObject, fil1 As File

Set fil 1=fsoTest.CreateTextFile(“c:\testfile.txt", True)

  第二種方法是使用 FileSystemObject物件帶 ForWriting標誌設定的 OpenTextFile方法,

Dim fsoTest As New FileSystemObject, ts1 As NewTextStream

Set ts1 =fsoTest.OpenTextFile(“c:\testfile.txt", ForWriting)

  第三種方法是使用File物件的帶 ForWriting標誌設定的 OpenAsTextStream方法:

Dim fsoTest As New FileSystemObject, fil 1As File,ts 1As TextStream

Set fsoTest =CreateObject(“Scripting.FileSystemObject")

fsoTest.CreateTextFile (“c:\testfile.txt")

Set fil1 = fsoTest.GetFile(“c:\testfile.txt")

Set ts1 = fil1.OpenAsTextStream(ForWriting)

  其中CreateTextFile方法的第一個引數用來指定,第二個引數用來指定如果磁碟上已經存在要建立的檔案是否覆蓋,TRUE表示覆蓋,FALSE表示不覆蓋,省略表示不覆蓋;OpenTextFile方法的第一個引數確定要開啟的文字檔案,第二個引數表示對該檔案進行寫操作;OpenAsTextStream方法的引數和OpenTextFile方法的第二個引數含義相同。

  在建立了寫入資料的文字之後就可以利用TextStream物件的 Write WriteLine方法了,它們之間的區別在於 WriteLine在指定的字串末尾新增換行符,而Write方法沒有。如果想要向文字檔案中新增一個空行,可以使用 WriteBlankLines 方法。在完成寫的動作之後,用Close方法關閉開啟的文字檔案。如果要讀取一個存在的文字檔案的內容,就要用到 TextStream 物件的 Read ReadLine ReadAll方法;這些方法的區別是 Read:從一個檔案中讀取指定數量的字元ReadLine:讀取一整行(緊跟,但不包括,換行符); ReadAll :讀取一個文字檔案的所有內容。下面在一個VB的工程中演示上述的效果。

  在VB中新建一個工程,然後在Form1上新增兩個命令按鈕,然後輸入以下程式碼:

Private Sub CmdRead_Click()

Dim fsoTest As New FileSystemObject, file1 As File,ts As TextStream, s As String

Set file1 = fsoTest.GetFile(“C:\testfile.txt")

Set ts = file1.OpenAsTextStream(ForReading)

'讀取一行

s = ts.ReadLine

MsgBox s

ts.Close

End Sub

Private Sub CmdWrite_Click()

Dim txtfile As File, ts As TextStream

Set txtfile = fsoTest.GetFile(“c:\testfile.txt")

Set ts = txtfile.OpenAsTextStream(ForWriting)

'使用Write方法寫入一行。

ts.Write (“This is only a Test")

'寫入一行帶有換行符的文字。

ts.WriteLine (“Testing 1, 2, 3.")

'向檔案中寫入三個換行符。

ts.WriteBlankLines (3)

ts.Close

End Sub

  在這裡我們假設已經在磁碟上建立了一個名為testfile.txt的檔案。在按下F5執行時,先單擊Write寫入資料,然後按下Read讀取資料。

三、結束語

  通過上面的介紹,我們可以看到FSO物件模型的確在傳統的檔案操作語句之外,提供了一種更方便,功能更強大的訪問檔案的操作方法。不過,我們還需要注意到FSO物件模型目前還不完善,當前使用的FSO物件模型還不支援建立隨機檔案或二進位制檔案。要建立隨機檔案和二進位制檔案,仍然要使用帶 Random Binary標誌的 Open命令。但從目前FSO物件模型的實際應用來看,我們仍然可以將FSO物件模型作為一種比較簡便的檔案操作解決方案。

(注:上述程式碼均在VB6.0 SR3)

File System ObjectVBscript裡的應用.

  在程式碼內操作文字檔案、資料夾及驅動器。它是指令碼執行期庫提供的物件之一,對於伺服器ASP頁面內的VBScriptJScript都有效。如果頁面的副檔名為.hta(表示它們是HTA的一部分),它也可用在客戶端的IE 5中。本節僅討論在伺服器上的ASP指令碼如何使用FileSystemObject物件。

  超級文字應用程式(HTA)由指定的"受信任的"頁面組成,在頁面的<HEAD>段裡包含<HTA: APPLICATION>元素。例如:

<HTA:APPLICATION ID="objMyApp"APPLICATIONNAME="myApp">

  這些頁面可以使用客戶端指令碼引擎中的一些不常用特性,這些特性中有FileSystemObject物件和TextStream物件。關於超級文字應用程式的更多資訊,請訪問Microsoft Workshop網站。

  可以使用下面的程式建立一個FileSystemObject物件例項:

' In VBScript:

Dim objMyFSO

Set objMyFSO =Server.CreateObject("Scripting.FileSystemObject")

// In JScript:

var objMyFSO =Server.CreateObject('Scripting.FileSystemObject');

<!-- Server-side with an OBJECT element -->

<OBJECT RUNAT="SERVER"SCOPE="PAGE" ID="objFSO"

PROGID="Scripting.FileSystemObject">

</OBJECT>

  在ASP頁面裡,增加一個對於FileSystemObject型別庫的引用是非常有用的。這允許使用它直接定義的內建常數,不用像過去那樣用數字等效表示式代替。整個指令碼執行期庫的型別庫可以增加到任何ASP頁面中,程式碼如下:

<!-- METADATA TYPE="typelib"FILE="%systemroot%\System32scrrun.dll" -->如果你是在另一個目錄下安裝Windows,必須編輯FILE的屬性值。

5.4.1FileSystemObject物件成員概要

FileSystemObject物件提供一個屬性和一系列方法,可用它們來操縱FileSystemObject物件實現的一些從屬物件。這裡提供了全部的內容概要,然後介紹每一個從屬物件。

1 FileSystemObject的屬性

FileSystemObject物件只有一個屬性,它用於得到當前機器上的所有有效驅動器的列表,如表5-4所示:

5-4 FileSystemObject物件的屬性及說明

Drivers

返回本地計算機可用的驅動器列表。

2 FileSystemObject的方法

FileSystemObject物件提供了使用從屬物件的一系列方法,從屬物件包括DriveFolderFile等物件。它也實現了用於TextStream物件的兩個方法:CreateTextFileOpenTextFile。根據所使用的物件的型別,將方法劃分為三類。

(1)與驅動器有關的方法

  與驅動器有關的方法如表5-5所示:

5-5與驅動器有關的方法及說明

DriveExists(drivespec)

如果在drivespec中指定的驅動器存在,則返回True,否則返回False

drivespec引數可以是一個驅動器字母,或者是檔案、資料夾的完整絕對路徑

GetDrive(drivespec)

返回drivespec指定的驅動器所對應的Drive物件。drivespacec可以包含冒號、路徑分隔符或者是網路共享名即:"C""C:""C:""\machinesharename"

GetDriveName(drivespec)

用字串返回drivespec指定的驅動器的名稱。drivespec引數必須是檔案或資料夾的絕對路徑,或者僅僅是驅動器字母,例如:"c:""c"

(2)與資料夾有關的方法

  與資料夾有關的方法如下所示:

BuildPath(path,name)

在已有的路徑path上增添名字為name的檔案或資料夾,如果需要,則增添路徑分隔符''

C