diff --git a/src/LINQ/RQL/Resource.vb b/src/LINQ/RQL/Resource.vb
index b8597ef..7d641ec 100644
--- a/src/LINQ/RQL/Resource.vb
+++ b/src/LINQ/RQL/Resource.vb
@@ -23,8 +23,13 @@ Public Class Resource : Implements IDisposable
End Get
End Property
+ '''
+ ''' the tree index
+ '''
+ Const indexfile As String = "/index.dat"
+
Sub New(res As StreamPack)
- Dim indexfile = res.OpenFile("/index.dat", FileMode.OpenOrCreate, FileAccess.Read)
+ Dim indexfile = res.OpenFile(Resource.indexfile, FileMode.OpenOrCreate, FileAccess.Read)
Dim parser As New IndexReader(indexfile)
buf = res
@@ -111,6 +116,10 @@ Public Class Resource : Implements IDisposable
''' this data payload.
'''
Public Function Add(key As String, data As Byte(), Optional category As String = "") As Boolean
+ If key.StringEmpty Then
+ Return False
+ End If
+
Dim tokens As String() = Strings.LCase(key).Split
Dim map As String = GetHashKey(data)
Dim path As String = URL(map, category)
@@ -184,20 +193,28 @@ Public Class Resource : Implements IDisposable
Order By o.tag Descending
End Function
+ Private Sub saveTreeIndex()
+ Using ms As New MemoryStream
+ Call New IndexWriter(ms).Write(index)
+ Call ms.Flush()
+ Call ms.Seek(Scan0, SeekOrigin.Begin)
+
+ Call buf.Delete(indexfile)
+
+ Dim file As Stream = buf.OpenFile(indexfile, FileMode.OpenOrCreate, FileAccess.Write)
+
+ Call file.Write(ms.ToArray, Scan0, ms.Length)
+ Call file.Flush()
+ Call file.Dispose()
+ End Using
+ End Sub
+
Protected Overridable Sub Dispose(disposing As Boolean)
If Not disposedValue Then
If disposing Then
- Using ms As New MemoryStream
- Call New IndexWriter(ms).Write(index)
- Call ms.Flush()
- Call ms.Seek(Scan0, SeekOrigin.Begin)
-
- Dim file As Stream = buf.OpenFile("/index.dat", FileMode.OpenOrCreate, FileAccess.Write)
-
- Call file.Write(ms.ToArray, Scan0, ms.Length)
- Call file.Flush()
- Call file.Dispose()
- End Using
+ If Not buf.is_readonly Then
+ Call saveTreeIndex()
+ End If
' TODO: 释放托管状态(托管对象)
Call buf.Dispose()