日期:2014-05-18  浏览次数:20409 次

读取文件,路径写入数据库,并保持目录结构用于分组显示
PS:原本是想用ASP实现,但感觉有些难度,考虑用C#来做,发上来的ASP代码仅供参考,主要是思路。

有一个目录结构,现在想把所有文件链接写入数据库,但还想在显示的时候保持目录的结构进行分组,以便区分同名文件。
有两种想法,一个是直接读取文件,将全部路径写入数据库,这样缺点是不容易分组显示。
另外一种方法是   遍历文件,就是下面的方法,但问题是我想在插入数据库后返回父目录的ID,应该会用到堆栈,但ASP中怎么实现类似方式?

数据结构是
FID   FName   ParID   Layer
思路是通过ParID连接各级目录之前的关系。

现在的问题是目录可以遍历,目录和文件都能得到,关键问题是该怎么在返回上一级目录后获取父目录呢》也就是父目录写入数据库后的ID?遍历搞的有些头大,是不是我这思路有问题?

遍历目录的代码:
<%OPTION   EXPLICIT%>
<%
dim   currentPath,fso,PFD,MF,SFolder,i,parID
 
call   main()  
'==============

Sub   main()
i=0   '//layer
        Set   fso   =Server.CreateObject( "Scripting.FileSystemObject ")
        Set   PFD=fso.getfolder(server.MapPath( "/intranet/orientation/ "))
        Response.Write( " <table> ")
        call   GetFileObj(PFD)
        call   GetFolderObj(PFD)
        Response.Write( " </table> ")
End   sub

Sub   GetFolderObj(FD_getfolder)  
i=i+1
        For   each   SFolder   in   FD_getfolder.subfolders  
                call   GetFileObj(SFolder)
                call   GetFolderObj(SFolder)
        Next
End   Sub
'//打印目录
Sub   GetFileObj(FD_getfile)
        WritePath(FD_getfile)
        For   each   MF   in   FD_getfile.files
                call   WriteFileMes(MF)
        Next
End   Sub
'//打印当前目录
Sub   WriteFileMes(MyFileObj)
%>
        <tr   >
                <td> <%=MyFileObj.name%> ##### <%=i%> </td>
        </tr>
<%
'//将当前目录名以及layer和父目录ID写入数据库
End   Sub
'//打印当前目录下文件
Sub   WritePath(FDObj)

'//获取当前的相对路径
dim   folder
folder=lcase(FDObj.path)
currentPath=mid(folder,instrRev(folder, "orientation "),len(folder)-1)
if   right(currentPath,1)= "/ "   then   currentPath=left(currentPath,len(currentPath)-1)
%>
        <tr>
                <td   bgcolor= "#FFFFD0 "   > <%=FDObj.path%> ### <%=currentPath%> ##### <%=i </td>
        </tr>
<%
'//将当前文件名以及layer和所在目录ID写入数据库
End   Sub
%>


------解决方案--------------------
sf
------解决方案--------------------
你要递归目录
将获取的地址写入数据库
------解决方案--------------------
库结构为
ID ParentID Name FileOrDirectory
分解的时候把文件夹和文件按照这种方式存储
存储文件夹的时候判断一下ParentID、Name和FileOrDirectory联合是否存在
如果存在则略否则插入
然后按照树的形式读取数据
分解路径可以根据上传文件的 "\ "符号一层层的分解

个人建议,参考一下