Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

razs

lista conteudo de pasta

Recommended Posts

Boas,

 

Este codigo permite-me listar as subpastas e os ficheiros nelas contidos o problema e que se ouver outras pastas nestas subpasta ele nao as ve, como faço para ele pegar um diretorio e listar tudo o que tem la dentro em formato treeview?

 

Já procurei por exemplos mas nenhum parece funcionar.

 

Obrigado

 folderspec = server.mappath("/ficheiros/") 
 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set fold = fso.GetFolder(folderspec) 
    for each subfolder in fold.subFolders 
        Response.Write("<br><br><b>"&subfolder.Name & "<b><br><br>") 
			
			 set ofile=fso.GetFolder(Server.MapPath("ficheiros/"&subfolder.Name))
			 for each subfile in ofile.files 
			 Response.Write("->"&subfile.Name & "<br>") 	
			 next
	next 
    set fold = nothing 
    set fso = nothing 
	

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo:

<%
dim fs,fo,x, pastalocal
set fs=Server.CreateObject("Scripting.FileSystemObject")
pastalocal=split(Request.ServerVariables("script_name"),"/")

response.write "Pasta atual: " & pastalocal(1) & "<br>Subpastas: <hr>"

loc= Server.MapPath("/"&pastalocal(1))
set fo=fs.GetFolder(loc)
for each x in fo.SubFolders
  Response.write x.Name & "<br>"
Next
Response.write "<hr>"
set fo=nothing
set fs=nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas devolve o nome das sub pastas.

 

Eu preciso que ele todas as pastas e sub pastas dentro da pasta mae

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque ele no seu loop

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo. Um controle TreeView é extremamente simples fazer em ASP. Este código mostra como criar uma classe simples treeview usando ASP e estilo em cascata. Excelente para programadores que desejam aprender como criar simples controles ASP. Vamos começar adicionando o TreeNodes manualmente
Para criar um treeview devemos incluir o seu arquivo de classe treeview (clsTreeView.asp) código mostrado abaixo:

<!--#include file="clsTreeView.asp"-->
<%
'declarar seu objeto treeview
Dim objTV

'criar uma instância de seu treeview
Set objTV = New TreeView

'adicionar 2 nós para o seu treeview
objTV.AddNode("Node1")
objTV.AddNode("Node2")

'adicionar 2 folhas ao seu primeiro nó
objTV.Nodes(0).Add(objTV.CreateNode("Node 1:1","page1.htm","Tool tip text"))
objTV.Nodes(0).Add(objTV.CreateNode("Node 1:2","page2.htm","Tool tip text"))

'adicionar um nó childNode para o seu segundo nó
objTV.Nodes(1).Add(objTV.CreateSimpleNode("Node 2:1"))

'adicionar folhas para o seu primeiro filho segundo nó
With objTV.Nodes(1).ChildNodes(0)
    .Add(objTV.CreateNode("Msn Brasil ","http://br.msn.com","Msn Brasil(2:1:1)"))
    .Add(objTV.CreateNode("Burzum ","http://Burzum.com","Burzum(2:1:2)"))

    'adicionar uma imagem diferente para o link Msn Brasil
    .ChildNodes(0).ImageUrl="http://www.msn.com/favicon.ico"
End With

'mostrar o seu treeview
objTV.Display

'limpa a memória
Set objTV = Nothing

%>

Usando Múltiplas TreeViews
Se você quiser usar mais de uma treeview na mesma página, adicione um valor de identificação para cada árvore como segue:

'declare objects
Dim objTV1, objTV2

'create instances of your treeviews
Set objTV1 = New TreeView
Set objTV2 = New TreeView

'set treeview ID's
objTV1.ID = "TV1"
objTV2.ID = "TV2"

Carregamento de um banco de dados
Se você quiser carregar o treeview de uma tabela de banco de dados, verifique se você tem uma tabela em seu banco de dados com a seguinte estrutura:



Onde o campo ParentID é o primeiro ancestral do nó de árvore.O ParentID de zero indica um nó raiz na árvore. Os campos URL e ToolTip pode ser deixado vazio para nós não-folha. Você pode então carregar o treeview, chamando o método LoadFromDB da seguinte forma:

T
reeView.LoadFromDB (Connection String, Nome da tabela Menu)

O código de exemplo abaixo mostra como carregar o treeview de uma tabela de banco de dados chamado de menu:

<!--#include file="clsTreeView.asp"-->
<%

'declare objects
Dim objTV, strConn

'set your connection string
strConn = "DRIVER={Microsoft Access Driver (*.mdb)};" _
    & "DBQ=" & Server.MapPath("site.mdb")

'cria uma instancia do treeview
Set objTV = New TreeView

'load the treeview from the 'Menu' database table
Call objTV.LoadFromDB(strConn,"Menu")

'exibir o  treeview
objTV.Display

'climpar a  memória
Set objTV = Nothing

%>

Você sempre pode modificar o banco de dados e da Classe TreeView (arquivo clsTreeView.asp) para atender às suas necessidades como a adição de um campo ImageURL ou mesmo otimizar o procedimento LoadFromDB.


Exibindo um diretório windows / pasta

Se você quiser exibir o conteúdo de uma pasta como o Windows Explorer, tudo que você tem a fazer é chamar o DisplayFolderContents com o caminho da pasta como mostrado abaixo:

<!--#include file="clsTreeView.asp"-->
<%

'declarar os objetos
Dim objTV

'criar uma instância de seu treeview
Set objTV = New TreeView
Call objTV.DisplayFolderContents("C:\InetPub\wwwroot")

'limpar memória
Set objTV = Nothing


%>



e vc pode usar jquery para exibir também com alguns efeitos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizando a lógica, seria um loop sobre loop ou seja, ao listar a pasta principal e encontrar uma subpasta, lista o conteúdo desta e assim por diante, quando finalizar, continua com o loop na ordem até voltar a pasta principal.

Dessa forma poderia listar todos os arquivos e pastas no formato expandido, adicionando um pouco de "css" para criar o aspecto de "treeview". Para criar os botões de expansão e contração (+ e -), aí só com JS.

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui a classe

<%
Option Explicit




Class Collection
	Private m_next,m_len
	Private m_dic	
	
	Public Sub Add(Item)
		m_dic.Add "K" & m_next,Item
		m_next = m_next+1		
		m_len = m_len+1		
	End Sub
	
	Public Sub Clear
		m_dic.RemoveAll 
	End Sub
	
	Public Function Length
		Length=m_len
	End Function
	
	Public Default Function Item(Index)
		Dim tempItem,i
		For Each tempItem In m_dic.Items 
			If i=Index Then
				Set Item=tempItem
				Exit Function
			End If
			i=i+1
		Next	
	End Function
	
	Public Sub Remove(ByVal Index)
		Dim Item,i
		For Each Item In m_dic.Items 
			If i=Index Then
				m_dic.Remove(Item)
				m_len=m_len-1
				Exit Sub
			End If
			i=i+1
		Next			
	End Sub
	
	Private Sub Class_Initialize
		m_len=0
		Set m_dic = Server.CreateObject("Scripting.Dictionary")				
	End Sub
	
	Private Sub Class_Terminate
		Set m_dic = Nothing				
	End Sub
End Class

Class Node	
	'Public Parent
	Public Text
	Public Href
	Public Target
	Public ToolTipText
	Public ChildNodes
	Public ImageUrl
	Public ID
	
	Public Sub Init(strText,strHref,strToolTipText)
		Text=strText
		Href=strHref
		ToolTipText=strToolTipText
	End Sub
	Public Sub Add(objNode)
		ChildNodes.Add(objNode)
	End Sub
	
	Private Sub Class_Initialize
		Set ChildNodes = New Collection				
	End Sub
	
	Private Sub Class_Terminate
		Set ChildNodes = Nothing				
	End Sub
End Class

Class TreeView
	
	Private m_folder
	Public Color	
	Public Nodes
	Public DefaultTarget
	Public ID
	
	Public Property Let ImagesFolder(strFolder)
		m_folder=strFolder
	End Property
	Public Property Get ImagesFolder()
		ImagesFolder=m_folder	
	End Property
	
	Private Sub Class_Initialize
		Set Nodes = New Collection	
		Color="Navy"
		m_folder="images"					
	End Sub
	
	Private Sub Class_Terminate
		Set Nodes = Nothing				
	End Sub
	
	Public Function AddNode(Text)
		Dim tn 
		Set tn = new Node
		tn.Text=Text
		Nodes.Add(tn)
	End Function
	
	Public Function CreateNode(Text,Href,ToolTipText)
		Dim tn 
		Set tn = new Node
		Call tn.Init(Text,Href,ToolTipText)
		Set CreateNode=tn
	End Function
	Public Function CreateSimpleNode(Text)
		Dim tn 
		Set tn = new Node
		tn.Text = Text
		Set CreateSimpleNode=tn
	End Function

	
	Private Sub LoopThru(NodeList,Parent)	
		Dim i,j,Node,blnHasChild,strStyle
		
		If Parent<>"0" Then
			Out ("<ul class=tree id=""N" & Parent & """>")
		Else
			Out ("<ul xstyle='margin-left:20px;' id=""N" & Parent & """>")
		End If
		For i=0 To NodeList.Length-1
			Set Node = NodeList(i)		
			If (Node.ChildNodes.Length>0) Then 
				blnHasChild=True	
			Else
				blnHasChild=False
			End If
			If Node.ImageUrl="" Then
				strStyle=""
			Else
				strStyle="style='list-style-image: url("& Node.ImageUrl &");'"
			End If				
			If blnHasChild Then
				Out("<li "& strStyle &" class=folder id=""P" & Parent & i & """><a class=treeview href=""javascript:toggle"& id &"('N" & Parent & "_" & i & "','P" & Parent & i & "')"">" & Node.Text & "</a>")
			Else
				If Node.Target="" Then
					Node.Target=DefaultTarget
				End If
				Out("<li "& strStyle &" class=file><a class=treeview href=""" & Node.Href & """ target=""" & Node.Target & """  title=""" & Node.ToolTipText & """>" & Node.Text & "</a>")
			End If
			
			If blnHasChild Then		
				Call LoopThru(Node.ChildNodes,Parent & "_" & i)
			End If	
					
			Out ("</li>")
		Next
		Out ("</ul>")
	End Sub

	Private Sub Out(s)
		Response.Write(s)
	End Sub
	
	Public Sub Display
		Out("<script>function toggle"& id &"(id,p){var myChild = document.getElementById(id);if(myChild.style.display!='block'){myChild.style.display='block';document.getElementById(p).className='folderOpen';}else{myChild.style.display='none';document.getElementById(p).className='folder';}}</script>")
		Out("<style>ul.tree{display:none;margin-left:17px;}li.folder{list-style-image: url("& ImagesFolder &"/plus.gif);}li.folderOpen{list-style-image: url("& ImagesFolder &"/minus.gif);}li.file{list-style-image: url("& ImagesFolder &"/dot.gif);}a.treeview{color:"& Color &";font-family:verdana;font-size:8pt;}a.treeview:link {text-decoration:none;}a.treeview:visited{text-decoration:none;}a.treeview:hover {text-decoration:underline;}</style>")
		Call LoopThru(Nodes,0)		
	End Sub
	
	Public Sub LoadFromDB(strConn,strMenuTable)
		Dim Conn 
		Set Conn = Server.CreateObject("ADODB.Connection")
		Conn.Open strConn
		
		Dim RS,node,parentid,parentNode
		Set RS = Conn.Execute("SELECT * FROM " & strMenuTable & " ORDER BY MenuID,ParentID")
		
		If Not RS.EOF Then
			Do While Not RS.EOF
				parentid=RS("ParentID")
				
				Dim child				 
				Set child = new Node
				Call child.Init(RS("Text"),RS("URL"),RS("ToolTip"))
				child.ID =RS("MenuID")
				
				If parentid=0 then
					Nodes.Add(child)
				Else
					Set parentNode = FindNode(Nodes,ParentID)
					If Not (parentNode is Nothing) Then
						parentNode.Add(child)
					End If
				End If
				RS.MoveNext		
			Loop
			RS.Close
		End If
		Set RS = Nothing
		Conn.Close 
		Set Conn = Nothing		
	End Sub
	
	Private Function FindNode (nodes,ID)
		dim i,tempNode		
		For i=0 To nodes.Length-1
			Set tempNode = nodes(i)
			if tempNode.Id=ID then
				Set FindNode=tempNode
				Exit Function
			Else
				If tempNode.ChildNodes.length>0 Then
					Set tempNode = FindNode(tempNode.ChildNodes,ID)
					If Not (tempNode is Nothing) Then
						Set FindNode=tempNode
						Exit Function
					End If
				end if
			End If				
		Next
		Set FindNode = Nothing			
	End Function
	
	Public Sub DisplayFolderContents(ByVal strFolderPath)
		Out("<script>function toggle"& id &"(id,p){var myChild = document.getElementById(id);if(myChild.style.display!='block'){myChild.style.display='block';document.getElementById(p).className='folderOpen';}else{myChild.style.display='none';document.getElementById(p).className='folder';}}</script>")
		Out("<style>ul.tree{display:none;margin-left:17px;}li.folder{list-style-image: url("& ImagesFolder &"/plus.gif);}li.folderOpen{list-style-image: url("& ImagesFolder &"/minus.gif);}li.file{list-style-image: url("& ImagesFolder &"/dot.gif);}a.treeview{color:"& Color &";font-family:verdana;font-size:8pt;}a.treeview:link {text-decoration:none;}a.treeview:visited{text-decoration:none;}a.treeview:hover {text-decoration:underline;}</style>")

		Dim fso 
		Set fso = Server.CreateObject("Scripting.FileSystemObject")
		If fso.FolderExists(strFolderPath) Then			
			Call ListFolderContents(fso.GetFolder(strFolderPath),0)			
		Else
			Out "<font color=red>Folder <b>'" & strFolder & "'</b> does not exist</font>"
		End If
		Set fso = Nothing
	End Sub
	
	Private Sub ListFolderContents(objFolder,Parent)
		Dim objSubFolder, objFile	
		If Parent<>"0" Then
			Out ("<ul class=tree id=""N" & Parent & """>")
		Else
			Out ("<ul xstyle='margin-left:20px;' id=""N" & Parent & """>")
		End If	
		
		dim i
		For Each objSubFolder In objFolder.SubFolders
			Out("<li class=folder id=""P" & Parent & i & """><a class=treeview href=""javascript:toggle"& id &"('N" & Parent & "_" & i & "','P" & Parent & i & "')"">")
			Out objSubFolder.Name & "</a>"			
			Call ListFolderContents(objSubFolder,Parent & "_" & i)
			Out "</li>"
			i=i+1
		Next
		
		For Each objFile In objFolder.Files
			Out "<li class=file>" & objFile.Name & "</li>"
		Next
		
		Out "</ul>"
		
		Set objFile = Nothing
		Set objSubFolder = Nothing
	End Sub
End Class




%>

<!--

	
	Public Sub LoadFromDB(strConn,strMenuTable)
		Dim Conn 
		Set Conn = Server.CreateObject("ADODB.Connection")
		Conn.Open strConn
		
		
		Call AddNodesFromDB(Conn,strMenuTable,0,-1)
		
		Conn.Close 
		Set Conn = Nothing		
	End Sub
	
	Private Sub AddNodesFromDB(objConn,strTable,intParentId,intDepth)
		Dim RS,node
		Set RS = objConn.Execute("SELECT * FROM " & strTable & " WHERE ParentID=" & intParentId)
		intDepth=intDepth+1
		If Not RS.EOF Then
			Do While Not RS.EOF
				node
				'Call AddNodesFromDB(objConn,strTable,RS("MenuID"),intDepth)
				RS.MoveNext
			Loop
			RS.Close
		End If
		Set RS = Nothing
	End Sub
	-->

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, tem uma classe ai e alguns exemplos de menu e dropdown, dá uma olhada também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei este

'declarar os objetos
Dim objTV

'criar uma instância de seu treeview
Set objTV = New TreeView
Call objTV.DisplayFolderContents("C:\InetPub\wwwroot")

'limpar memória
Set objTV = Nothing


e ele só me mostra os ficheiros no wwwroot :(

 

O primeiro exemplo com os nodes defenidos funciona mas ele tem de devolver tudo o que esta na pasta e suas sub pastas pois esta sempre a mudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá razs, veja esse exemplo:

<%
Set fso=Server.createobject("Scripting.FileSystemObject")
pastaprincipal = "c:\teste"
Set pasta=fso.GetFolder(pastaprincipal)
Set pastas=pasta.Subfolders
for each diretorio in pastas
    response.write "Nome da Sub-Pasta: " & diretorio.name & "<br>"
    set subpasta=fso.getfolder(pastaprincipal & "\" & diretorio.name)
    set arquivos = subpasta.files
    response.write "Arquivos da Sub-Pasta:<br>"
    for each arquivo in arquivos
          response.write arquivo.name & "<br>" 'aki lista os nomes dos arquivos.
    next
    response.write "<br><br>"
next
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas Wilnet, esse codigo nao devolve nada :s


Calma, resultou Wilnet, o problema e que so mostra os ficheiros da subpasta, e ignora as subpastas que estao dentro das subpastas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um loop no pasta.Subfolders

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei fazer o loop mas nao estou a ver como ele verifica a quantidade de ficheiros na sub

for each diretorio in pastas
				
				do while pastas<>""
				
						response.write "Nome da Sub-Pasta: " & diretorio.name & "<br>"
						
						set subpasta=fsoa.getfolder(pastaprincipal & "\" & diretorio.name)
						set arquivos = subpasta.files
						
						response.write "Arquivos da Sub-Pasta:<br>"
						
						for each arquivo in arquivos
							  response.write arquivo.name & "<br>" 'aki lista os nomes dos arquivos.
						next
										
						response.write "<br><br>"

				loop	

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, ja funciona agora só dois pontos:

 

1- o codigo nao funciona se eu tirar a primeira parte do codigo embora nao tenha associado, não me parece ter logica-

 

2- os ficheiros nao dao para clicar ou seja como faço para lhes por url?

 

->Feito, alterei na class esta linha

Out "<li class=file><a href='" & folderspec & "/" & objFile.Name & "' target='_ipageview'>"& objFile.Name &"</a></li>"
'primeira parte

	dim folderspec, fso, fold, ofile,subfolder,subfile,subfilemain
	folderspec = server.mappath("/ficheiros/") 
 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set fold = fso.GetFolder(folderspec) 
   
   'mostra subpastas na pasta mae
	for each subfolder in fold.subFolders 
    Response.Write("<bb><br>") 
	next 
	response.write "<br><br><br><br>"	
	SET FSO= Nothing
	sET fold=nothing
	
'Fim da segunda parte


				dim objTV
				Set objTV = New TreeView
                                folderspec = server.mappath("/ficheiros/")
				Call objTV.DisplayFolderContents(Server.MapPath("ficheiros"))
				Set objTV = Nothing

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro está mostrando?

 

Esse Code que postou, está incompleto tb né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu tirar o excerto de codigo identificado como primeira parte ele lista as pastas mas nao permite clicar e expandir.

 

Este excerto de codigo identificado como primeira parte nao faz nada eu so nao apago porque depois a treeview nao abre :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo, dá uma procurada no fórum tem uns exemplos que coloquei de explorer, dá até para deletar, criar, copiar, renomear... vai te ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.