賈令濤,李 麗
(1.中國飛機強度研究所,陜西 西安 710065;2.西藏民族大學 信息工程學院,陜西 咸陽 712082)
基于Web的文件系統信息展示方法
賈令濤1,李 麗2
(1.中國飛機強度研究所,陜西 西安 710065;2.西藏民族大學 信息工程學院,陜西 咸陽 712082)
對于存放于數據服務器中共享的數據文件信息,隨著數據量的增加將逐漸難以共享、查閱和使用。為了便于共享這些數據資料,文中提出一種基于Web的文件系統信息展示方法,實現在Web頁面上查找并展示數據文件。在分析數據文件存儲方式的基礎上提出九條定義,結合SQL Server設計靈活的文件信息存儲關系表。設計遞歸算法從文件系統中讀取指定目錄下的目錄和文件信息,利用ASP.NET的TreeView控件和Table控件的動態編程控制方式,設計遞歸算法動態生成TreeView和Table的數據顯示表格,實現文件系統中目錄及其文件信息的直觀顯示,并通過為所有文件提供名稱檢索及超鏈接下載的方式實現試驗數據信息的共享。
文件系統;目錄結構;ASP.NET;TreeView控件;Table控件
日常工作中經常需要將一些知識、經驗和數據等以文件形式存放于數據服務器中,以實現資源的集中存儲和共享。但隨著數據文件的持續匯總,數據文件不僅需要更大的存儲空間,同時目錄結構也紛繁復雜,在增加管理難度的同時,導致從其中查找目標文件也越來越困難。而通過對數據文件存儲方式的分析發現:數據文件以不同的目錄名稱保存在多級目錄中,同時每一級目錄中存在各種不同格式的數據文件,因此目錄結構、文件格式和文件數量不具有任何規律性。
為了便于共享、查閱、使用數據文件,構建基于網絡的管理系統以獲取和管理資料是一種便捷的方法[1-3];通過遞歸算法獲取文件夾的目錄結構、屬性和文件數據等信息以存儲于數據庫[4-5],能夠有效保留原始數據的分類和數據信息。結合上述兩種思想,文中通過對文件系統[6-7]、數據庫技術[8]以及ASP.NET技術[9-10]的研究,提出一種基于Web的文件系統信息展示方法。
(1)在分析數據文件的目錄與文件存儲方式的基礎上提出九條定義;
(2)在此基礎上,設計一種靈活的文件信息組織與存儲關系,使用存儲過程(Stored Procedure)[11-12]實現數據庫表及各表之間關系的動態建立,并將提取的目錄結構和文件信息實現分層存儲;
(3)設計遞歸提取算法將數據文件的目錄、文件名稱及其關系信息存儲于關系數據庫表中;
(4)從數據庫表中讀取存入的數據文件信息,并設計遞歸算法根據數據文件及其目錄的關系動態生成TreeView[13]和Table,在Web頁面中查詢、使用數據文件[14]。
為了實現數據文件及其相關關聯信息的準確共享與展示,必須預先對這些信息進行組織并使存儲方案的規劃合理。結合文獻[4-5]中的描述,在對數據文件系統深入分析的基礎上,為了能夠準確、完整地表述數據文件系統的信息,文中方法確定的數據文件組織與存儲方案包括以下信息:
(1)目錄結構和文件關系。描述數據文件與各級目錄之間的從屬關系、數據文件相關的各級目錄之間的從屬關系,以及各個目錄的相關屬性信息。
(2)文件屬性信息。描述數據文件的相關屬性信息,包括文件名稱、類型、大小、創建日期等信息。
(3)文件路徑。描述數據文件相對于根目錄的相對存儲路徑信息,以確定各個數據文件路徑。
(4)目錄路徑。描述各級目錄相對于根目錄的存儲路徑信息,以確定各個目錄路徑。
在上述基本信息的基礎上:為了方便、準確地描述,針對數據文件的屬性、目錄類型及其屬性等信息提出八條定義;為了準確記錄八條定義中描述的數據信息及關聯關系,以及相關的各類信息,設計相應的數據表結構以滿足數據文件在數據庫中的表現形式需求;為了將數據文件相關的文件系統信息準確存儲至數據表結構中,設計了相應的遞歸算法在獲取文件系統中相關目錄及文件信息的同時存入數據庫表中。
1.1 定 義
定義1:父目錄,指當前目錄的上一級目錄;
定義2:子目錄,指當前目錄的所有下一級目錄;
定義3:子文件,指當前目錄下的所有數據文件;
定義4:子孫目錄,指當前目錄的各級子目錄;
定義5:葉子目錄,指子目錄數為零的目錄;
定義6:目錄層級,指當前目錄所處層級,如根目錄的目錄層級為0級,根目錄的子目錄的目錄層級為1級,之后逐級遞增;
定義7:目錄距離,指當前目錄與指定目錄的目錄層級之差;
定義8:目錄行數,指當前目錄的子孫目錄中葉子目錄的數量,與當前目錄是否存在子文件(存在為1,不存在為0)之和;
定義9:目錄深度,指當前目錄與子孫目錄中所有葉子目錄的目錄距離最大值。
1.2 數據庫表結構及數據庫表創建
1.2.1 數據庫表結構
由于文中所涉及的數據庫表結構是連接文件系統中數據文件及其結構信息與Web頁面之間信息展示的橋梁,因此對數據庫表結構設計的兩個最基本要求為:
(1)能夠根據上述九條定義的描述,清晰、準確地記錄數據文件相關的目錄結構以及目錄之間、文件與目錄之間的關系;
(2)數據庫表數據項中所記錄的信息足夠指導在Web頁面上動態生成Table表格。
因此綜合考慮上述兩條要求,在數據庫表設計時將同一目錄下的子目錄和子文件保存在同一張數據庫表中,而子目錄與子文件的具體屬性信息由相應的若干數據庫字段描述,同時通過相應的數據庫字段描述子目錄數、子文件數、目錄深度和目錄行數等信息。各個數據庫字段信息簡要描述如表1所示。

表1 FileDirInfor表結構
表1給出了數據庫表結構的各個字段的簡要描述信息。這些字段不僅記錄了各個數據文件與目錄的基本屬性信息,同時實現數據文件、目錄及其與父目錄、子目錄之間關聯關系的清晰記錄。下面針對數據庫表結構中各個字段的含義以及各個字段與設計要求之間的關聯關系進行具體描述:
(1)不同目錄層級之間單獨使用數據庫表記錄,因此每一層級的表名為Tablei,其中i表示該表所記錄的目錄層級,如根目錄表名為Table0。
(2)ID是當前記錄在其父目錄下的唯一標識。
(3)Name描述當前記錄的名稱。
(4)DorF描述當前記錄是目錄信息或文件信息。0為目錄,1為文件。
(6)KeyWords僅當DorF為1時有效,是對數據文件內容信息的關鍵字描述。
(7)ParentID表明該條記錄與上一層級數據庫表中的哪條記錄的目錄間存在父子關系。
(8)SFCount描述當前目錄下子文件的數目(若該記錄DorF為1,即為數據文件時,該值為0),并為父目錄的RowCount字段提供數據支持。
(9)SDCount描述當前目錄下子目錄的數目(若該記錄DorF為1,即為數據文件時,該值為0),為0則表示該目錄為葉子目錄。
(10)DepthLevel描述當前目錄的目錄深度(若該記錄DorF為1,即為數據文件時,該值為0),也即當前目錄至根目錄的目錄距離,同時該字段可以指明Table控件的列數。
(11)RowCount描述當前目錄下葉子目錄的數量和子文件的數量信息(若該記錄DorF為1,即為數據文件時,該值為0)。若當前目錄存在子文件則在其葉子目錄數量基礎上加1,否則不操作,同時該字段與Table控件的行數對應。
根據上述描述易知,(1)~(11)條可以滿足數據庫表結構設計的兩個基本條件的要求,其中(10)和(11)所記錄的數據信息用于后續動態生成Table控件。
1.2.2 文件系統信息遞歸提取算法
數據文件信息以目錄和數據文件結合的方式組織和存儲,包括若干目錄及其目錄結構、不同格式的數據文件。對此結構分析可知:
現代建筑行業經過多年的發展,其施工技術水平和管理理念模式已經有了長足的進步,不過仍然存在部分建筑企業施工技術水平較低,管理模式落后,對于工程項目的模型數據共享工作不到位,最終影響到項目成本管理的準確性。
(1)各個目錄的子目錄數不具有任何規律,目錄深度也不確定;
(2)當某個目錄不存在子目錄(即該目錄為葉子目錄)時其目錄深度為0;
(3)某個目錄的目錄深度為其子目錄中目錄深度最大值加1。
在上述三條基本信息的基礎上,文中方法通過設計遞歸算法在提取目錄和數據文件基本屬性信息的同時,獲取目錄與數據文件的層級結構信息,以支持后續基于Web頁面的Table控件展示。給定一個目錄,具體遞歸算法流程如下:
步驟1:獲取當前目錄的目錄層級數,如果大于已記錄的目錄深度,則更新目錄深度為當前目錄層級數,同時為當前目錄創建新的數據庫表,記錄其基本屬性信息。
步驟2:判斷當前目錄的目錄層級數,如果目錄層級數為0,則為根目錄,其父目錄標識為0;如果目錄層級數非0,則為當前目錄記錄其父目錄標識。
步驟3:提取當前目錄的子文件數,用于更新父目錄的子文件數。對于每一個符合要求的數據文件,將其基本屬性信息存儲于當前目錄層級對應的數據庫表中。
步驟4:提取當前目錄的子目錄數,如果子目錄數為0,則表示該目錄為葉子目錄,進入步驟5;否則,對于當前目錄的每一個子目錄,執行步驟6。
步驟5:對于葉子目錄,設置其子目錄數為0,行數設置為1,并將其父目錄的葉子目錄數目、行數分別加1。
步驟6:對于非葉子目錄,根據子文件數、葉子目錄數和子目錄返回的目錄行數更新當前目錄的目錄行數,即:如果子文件數為0,則其目錄行數等于返回的目錄行數與葉子目錄數之和;如果子文件數非零,則其目錄行數設置為子目錄返回的目錄行數與葉子目錄數之和加1。
步驟7:更新每一層級數據庫表中每條記錄的目錄深度,即根據返回的最大目錄級數更新每一條目錄記錄的目錄深度。
2.1 動態創建TreeView目錄信息
數據文件以多級目錄的形式存在,上述數據庫表結構中記錄的信息以若干根目錄結構為基礎,擴展為不同的數據文件及其目錄信息,因此以這些根目錄為基礎,可形成若干目錄樹。不同目錄樹的子目錄可能全部為子目錄,也可能包含子文件,因此對于尚未包括子文件的目錄樹,將其設置為數據文件分類的參考,根據用戶需要設置目錄樹的層級限定,通過遞歸算法創建目錄結構,根據數據庫中的信息自動生成TreeView控件。
算法流程如下:
步驟1:從數據庫中獲取當前目錄層級的目錄信息。
步驟2:對于每一個目錄,分別從數據庫中獲取其子文件數。如果子文件數非零,則當前目錄可作為TreeView的葉子節點,直接返回;否則,進入步驟3。
步驟3:子文件數為零,則獲取其所有子目錄,執行步驟1操作。
通過以上算法的遞歸執行,將數據文件的目錄結構信息映射為ASP.NET的TreeView結構。該結構可以作為目錄信息導引用戶使用,當用戶需要查看某目錄下的詳細子目錄和數據文件時,可點擊相應TreeNode的葉子節點,以查看其詳細信息。
2.2 動態創建Table目錄與文件詳細信息
上一節根據用戶設置不同的目錄樹層級可以在Web頁面上依托TreeView控件形成相應的目錄導航,實現一定層級范圍內的目錄結構展示。為了進一步查看該目錄導航下的子目錄及數據文件信息,用戶需進一步點擊TreeView中相應的葉子節點。
對于TreeView中不同的葉子節點,以其為根目錄能夠重新構建各自子目錄與子文件的樹狀結構。對于不同的葉子節點,由于其對應的目錄標識所對應的目錄深度和子目錄數等信息不同,為了便于統一在Web頁面展示,文中方法同樣采用遞歸算法進行處理,根據該葉子節點包含的目錄標識信息直接動態創建該目錄對應的目錄與文件信息的詳細表格。
算法流程如下:
步驟1:從數據庫表中獲取指定葉子節點對應目錄的數據信息,根據標記(初始為否)判斷是否需要新建TableRow。如果為非葉子目錄,進入步驟2;否則,進入步驟5。
步驟2:為當前目錄新建一個TableCell,該TableCell的RowSpan為該目錄的CountOfRows、ColumnSpan為1,將其加入父目錄所在的TableRow。如果當前目錄下子文件數不為0,則進行步驟3;否則,進入步驟4。
步驟3:為子文件新建一個TableCell,該TableCell的RowSpan為1、ColumnSpan為當前目錄的DepthLevel,將其加入當前目錄所在的TableRow。從數據庫中提取當前目錄的所有子文件,為每一個子文件新建HyperLink與之對應,并將該HyperLink加入TableCell。進入步驟4。
步驟4:對于當前目錄的第一個子目錄,新建TableRow的標記為False,對于其他子目錄,分別新建TableRow并加入Table后,進入步驟1進行遞歸處理。
步驟5:為當前葉子目錄新建一個TableCell,該TableCell的RowSpan為1、ColumnSpan為1,將其加入父目錄所在的TableRow。同時再新建一個TableCell,該TableCell的RowSpan為1、ColumnSpan為當前目錄的DepthLevel,將該葉子目錄中的所有子文件從數據庫中提取出來,為每一個子文件新建HyperLink與之對應,并將該HyperLink加入該TableCell。
如圖1所示,通過文中方法將文件系統中指定目錄下的數據文件及其目錄關系信息顯示在Web頁面中。輸入為“文件資料”根目錄下的目錄及相應的數據文件,在“文件資料”根目錄下存在不同的子目錄以及相應的數據文件。通過文中方法遞歸獲取目錄結構與數據文件信息后存儲至數據服務器,之后通過Web服務器實現這些數據文件在Web頁面的共享與顯示,同時支持用戶的關鍵詞檢索及下載使用。
圖1中,左側的TreeView控件中顯示的是限定為三級的目錄樹,右側表格中顯示的內容為左側目錄對應的子目錄及其下的數據文件名稱及其超鏈接,并可通過超鏈接查看具體的數據文件。

圖1 應用示例
通過對文件系統、數據庫技術以及ASP.NET技術的研究,設計并實現了一種基于Web的文件系統信息展示方法,將大量數據文件通過Web形式展示,便于數據的共享、查找和使用。在分析文件系統中目錄與文件存儲方式的基礎上,設計了一種靈活的文件信息存儲關系,并通過遞歸提取算法將文件系統中目錄和文件信息存儲于關系數據庫表中,在讀取數據庫信息后動態遞歸生成TreeView和Table,在Web頁面中將指定目錄的詳細文件信息顯示出來并提供各個數據文件的超鏈接。該方法可以十分便捷地將目前存儲在硬盤文件系統中的數據信息顯示于Web頁面,便于用戶對數據信息的查閱、共享、使用,實現了數據信息的資源共享。
[1] Jones W,Bruce H,Dumais S.Keeping found things found:the study and practice of personal information management[M].Boston:Morgan Kaufmann Publishers,2008.
[2] 陳定權,劉頡頏.參考文獻管理軟件評析與展望—以EndNote、NoteExpress為例[J].現代圖書情報技術,2009(7):80-84.
[3] 張 媚,黃 穗,鄧彩細.面向科研團隊的Web文獻協作管理系統構建[J].微計算機應用,2010,31(7):58-62.
[4] 李昌貴,呂志平.數據庫中文件夾的整體存儲與隨機訪問[J].計算機工程,2011,37(5):41-43.
[5] 李 良,柴 毅,王道斌.基于.NET的Oracle BLOB數據高效存取方法[J].計算機工程,2008,34(20):64-65.
[6] 居錦武,王蘭英.NTFS文件系統剖析[J].計算機工程與設計,2007,28(22):5437-5439.
[7] Custer H.Inside the windows NT file system[M].[s.l.]:Microsoft Press,1994.
[8] Stephens R.數據庫設計解決方案入門經典[M].北京:清華大學出版社,2010.
[9] 瞿 杰.ProgrammingASP.NET中文版[M].北京:電子工業出版社,2007.
[10]KauffmanJ,MatsikB.BeginningASP.NETdatabasesusingC#[M].[s.l.]:WroxPressLtd.,2002.
[11]MouradO,AthmanB.Queryprocessingandoptimizationontheweb[J].DistributedandParallelDatabases,2004,15(3):187-218.
[12]TanB,ZengL.AperformanceoptimizationbasedonstoredprocedureinRDBSproject[C]//Procofinternationalconferenceoncomputer&communicationtechnologiesinagricultureengineering.[s.l.]:[s.n.],2010:594-597.
[13] 杜 娟,楊瑋清.TreeView目錄構建及數據拖放的編程開發[J].數字技術與應用,2011(11):148-148.
[14] 周炎濤,陳賢謀.ASP.NET中TreeView控件與數據庫結合創建動態目錄樹[J].航空計算技術,2004,34(2):25-27.
A Method of File System Information Display Based on Web
JIA Ling-tao1,LI Li2
(1.Aircraft Strength Research Institute of China,Xi’an 710065,China; 2.School of Information Engineering,Xizang Minzu University,Xianyang 712082,China)
The huge amounts of data stored in servers are not convenient for sharing,searching and using.In order to share the test data widely,the file system,SQL Server and Web technique are integrated into the method which shows the data files on the Web.First,the data files and their relationship is analyzed,and nine definitions are formed.In succession,the flexible file store tables of SQL Server is constituted,and then a recursive arithmetic which obtains the information of specified directory in the disks is designed.Finally,using a recursive arithmetic by dynamically programming the TreeView and Table Control of ASP.NET,the directories and files stored in the data table could be showed on the Web,and the detail information of files could be obtained by opening the hyperlinks.
file system;directory structure;ASP.NET;TreeView Control;Table Control
2014-12-09
2015-04-13
時間:2016-03-22
中航工業技術創新基金(2013A62302R)
賈令濤(1983-),男,碩士,工程師,研究方向為計算機應用、數據管理技術。
http://www.cnki.net/kcms/detail/61.1450.TP.20160322.1518.022.html
TP311.1
A
1673-629X(2016)04-0066-04
10.3969/j.issn.1673-629X.2016.04.014