檔案存取類別

導論
方法
 開啟檔案
 從檔案讀入位元組
 設定檔案絕對指標位置
 從檔案寫入位元組
屬性
應用
 檔案複製

導論

本類別為了能存取 2 GB 以上檔案而設計,目前依需求僅能存取二進位檔 (Binary) ,採用 Visual Basic 相同基底 1 ,類別中會自動換算至 API 基底 0 相同之值,本類別仍在發展中,部分程式碼尚未充分測試完畢,為配合網友需求,先行上網,未來仍有可能依個人工作或研究上之需求進行調整

 

屬性

項目 說明
AutoFlush 設定是否將緩衝區之資料自動寫入檔案,預設為 True
FileHandle 傳回檔案代號 hFile
FileName 傳回檔案名稱
FileSize 傳回檔案大小
IsOpen 傳回檔案是否開啟中

方法

項目 說明
CloseFile 關閉檔案
Flush 將緩衝區之資料自動寫入檔案
OpenFile 開啟檔案
ReadBytes 從檔案讀入位元組
SeekAbsolute 設定檔案絕對指標位置
SeekRelative 設定檔案相對指標位置
SetFileEnd 寫入檔案終止符號
WriteBytes 從檔案寫入位元組

開啟檔案

OpenFile

引數 型別 說明
sFileName String 檔案名稱
dwFileAccess Long 檔案屬性

範例:

ApiFile.Open "C:\Temp\Test.txt"

從檔案讀取位元組

ReadBytes ,傳回位元組陣列

引數 型別 說明
ByteCount Long 欲讀取位元組數

範例:

tBytes=ApiFile.ReadBytes(1024)

設定檔案絕對指標位置

SeekAbsolute ,傳回位元組陣列絕對指標位置

引數 型別 說明
LowPos Varinat 絕對指標位置或低位元指標
HighPos Varinat 高位元指標,可省略

說明:

若省略高位元指標,則假定 LowPos 可能包含超過 2 GB 以上之指標,可直接指定 18,446,744,073,709,551,615 (18 EB 或 18,446,744,073 GB) ,在任何狀況下亦可以高低位元指標混合指定絕對指標位置

範例:

Debug.Print ApiFile.SeekAbsolute(1)
Debug.Print ApiFile.SeekAbsolute(CDec("18446744073709551615"))

從檔案寫入位元組

WriteBytes

引數 型別 說明
DataBytes Byte() 位元組陣列

範例:

ApiFile.WriteBytes tBytes()

應用

應用本類別之檔案操作程式模組

檔案複製

myFileCopy ,傳回是否有錯誤發生

引數 型別 說明
strSource String 來源檔案字串
strTarget String 目標檔案字串
nByte Long 可省略,緩衝區大小,預設為 32 KB
bResume Boolean 可省略,是否續傳,預設為 False
nGetSize Variant 可省略,目前已取得檔案大小
nFileSize Variant 可省略,來源檔案大小
bStop Variant 可省略,是否停止執行

說明:

nGetSize 、 nFileSize 、 bStop 三個參數為傳址呼叫,可配合對話盒控制處理進度說明,若透過網路芳鄰傳遞檔案,當伺服主機關機或發生錯誤,會傳回錯誤訊息

範例:

Private UrlGetSize
Private UrlFileSize
Private StartTime As Date
Private bStop As Variant
Private Sub GetWNetFile(Optional hAction)

Dim WNetFile As New cApiFile

...

StartTime = Now - 1 / 86400

mErrorCode = myFileCopy(sFile, oFile, , bResume, UrlGetSize, UrlFileSize, bStop)

...

End Sub

Private Sub tmrUpdate_Timer()

Static oldGetSize, oldTime

...

If UrlFileSize = 0 Then
 HelpBar "取得檔案大小中... (" & Format(Now - StartTime, "nn:ss") & ")"
 If Not IsMissing(UrlGetSize) Then
  strHelp = strHelp & Format(UrlGetSize / 1000, strFormat) & " kb/(無法取得大小)"
 Else
  Exit Sub
 End If
ElseIf UrlFileSize < UrlGetSize Then
 UrlFileSize = UrlGetSize
 strHelp = strHelp & Format(UrlGetSize / 1000, strFormat) & " kb/(無法取得大小)"
Else
 tTime = Now - StartTime
 If tTime = 0 Then
  tTime = 1 / 86400
 End If
 strHelp = strHelp & Format(UrlGetSize / 1000, strFormat) & " kb/" & Format(UrlFileSize / 1000, strFormat) & " kb" & Format(UrlGetSize / UrlFileSize, "(0.0 %)")
 If UrlGetSize = 0 Then
 Else
  strHelpEnd = ",預估完成時間:" & Format(StartTime + tTime / ((UrlGetSize - FileOldSize) / (UrlFileSize - FileOldSize)), "hh:nn:ss")
 End If
End If

tTime = Now - oldTime

If tTime = 0 Then
 tTime = 1 / 86400
End If

HelpBar strHelp & ",擷取速率 " & Format((UrlGetSize - oldGetSize) / tTime / 86400 / 1000, strFormat) & " kb/sec" & strHelpEnd

oldGetSize = UrlGetSize
oldTime = Now

End Sub