Ir para conteúdo

POWERED BY:

Arquivado

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

soulforjah

[Resolvido] Loop For em pasta local ordenando arquivos

Recommended Posts

Sds,

Bom to gerando um loop numa pasta e queria ordenar os arquivos por data de ultima modificação deste, a fim de otimizar processo... assim que o proximo arquivo atingir valor superior ao determinado eu saio do loop, considerando que os demais não precisarão ser conferidos pelo condição IF.

 

Consigo fazer isso? não encontrei nenhuma especificação sobre o assunto:

 

datelimite = date - 30 'dia atual menos 30 dias
	For Each Arquivo In Pasta.Files

	DataUltimaModificacao = Arquivo.Modified

           If DataUltimaModificacao < datelimite then
	      Response.Write (Arquivo.Name)
            Else
              Exit For 'para que essa otimização funcione preciso que os arquivos estejam ordenados por data da ultima modificação
           End If
        Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe um exemplo de explorer , k você pode ordenar, por data,nome etc

dá uma pesquisada no forum, vai te ajudar5

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe um exemplo de explorer , k você pode ordenar, por data,nome etc

dá uma pesquisada no forum, vai te ajudar5

 

Xanburzum, Não encontrei este exemplo não, ou melhor, encontrei um, mas alimentando um array com o nome dos arquivos para entao ordena-los, só que desta forma meu Script roda com o dobro do tempo, o que é inaceitavel para a minha aplicação...pois trabalho com mais de

Mas de qualquer forma to queimando meus neuronios... tem que haver um

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja este exemplo que tenho aqui comentado:

<%
"Primeiro vamos abrir um objeto FSO
Set objFSO = Server.CreateObject ( "Scripting.FileSystemObject" )

"Agora pegamos a pasta com as imagens!
Set objPasta = objFSO.GetFolder ( Server.Mappath("images\") )

"Vamos criar um recordset agora!
"Ele que vai ter o trabalho de ordenar os arquivos!
Set Rs = Server.CreateObject ( "ADODB.RecordSet" )

"Vamos adicionar 2 campos nesse recordset!
"O método Append recebe 3 parâmetros:
"Nome do campo, Tipo, Tamanho (opcional)
"O tipo pertence à um DataTypeEnum, e você pode conferir os tipos em
"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstdatatypeenum.asp
"200 -> VarChar (String), 7 -> Data
Rs.Fields.Append "nome", 200, 255
Rs.Fields.Append "data", 7

"Vamos abrir o Recordset!
Rs.Open

"Temos que percorrer agora todos os arquivos e jogar na nossa tabela virtual!
For Each Arquivo In ObjPasta.Files

Rs.AddNew
Rs.Fields("nome").Value = Arquivo.Name
Rs.Fields("data").Value = Arquivo.DateLastModified

Next

"Todos os arquivos no recordset, agora vamos ordená-lo!
"Da maior data para a menor!
Rs.Sort = "data desc"

"Pronto! Agora temos os arquivos todos em ordem em nosso recordset! Vamos exibi-los!
Rs.MoveFirst
While Not Rs.EoF
Response.Write "<img src=""images/" & rs.fields("nome").value & """><br>"
Response.Write "Data de Modificação: " & rs.fields("data").value
Response.Write "<p>"

Rs.MoveNext
Wend

"Fechando os objetos!
Rs.Close
Set Rs = Nothing

Set objPasta = Nothing
Set objFSO = Nothing
%> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

dee, este foi o script q citei ter encontrado... soluciona em parte o problema de ordenar, mas aumenta em dobro ou mais o tempo de execucao da minha aplicacao...

 

Vou me aprofundar mais: Minha aplicacao e para eliminar arquivos antigos (>90 dias) que ficam dentro de uma estrutura de arquivos. Consigo lista-los, mas demora muito tempo, talves horas, pois sao muuuuitos arquivos. O script asp varre as pastas a procura de arquivos antigos lendo todos os arquivos das pastas.

 

Ideia de otimizacao: Ordenar esta varredura por data, pois se ao varrer uma pasta e ele encontrar um arquivo que nao seja antigo(dentro da data limite) ele sai do loop (exit for) para varrer outra pasta, sabendo que pela ordem date os proximos tbm estaram no limite, nao sendo estes antigos...

 

Bom ainda to queimando os neuronios... como eu disse... tem q haver uma maneira!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma procurada k eu postei alguns exemplos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma procurada k eu postei alguns exemplos...

 

Xamburzum, vi seus exemplos de explorer,que são muito bons copiei até alguns que vão me atender aqui, mas não consegui encontrar o que me atende neste caso especifico...

Xam, Minha duvida é: consigo fazer isso com ASP puro e sem ter que dar um loop na pasta e depois outro loop para ordenar?

abração...

 

Pensei numa coisa...

fazer uma imagem do pasta num txt com o comando do DOS

DIR /OD > ar.txt
que ordena por data e joga o dir para o txt... e trabalho o loop neste arquivo...

 

o que acham? sera que existe algum problem nessa "gambiarra"?

abrcs

 

Pensei numa coisa...

fazer uma imagem do pasta num txt com o comando do DOS

DIR /OD > ar.txt
que ordena por data e joga o dir para o txt... e trabalho o loop neste arquivo...

 

o que acham? sera que existe algum problem nessa "gambiarra"?

abrcs

 

Bom Pessoall,

Foi isso mesmo que eu fiz e esta rodando uma barbaridade...

         Do While not objTxt.AtEndOfStream
		  ContaLinha = ContaLinha + 1
		  campo = objTxt.ReadLine
		  NomeArquivoAnalizado = Mid(campo,40,60)
		  Dia = Mid(campo,4,2)
		  Mes = Left(campo,2)
		  Ano = Mid(campo,7,2)
		  If ContaLinha <> 1 and ContaLinha <> 2 and ContaLinha <> 3 and ContaLinha <> 4 and ContaLinha <> 5 and Mes <> "  " Then
		   DataArquivoAnalizado = CDate(DiaUltMod&"/"&MesUltMod&"/"&AnoUltMod)
		     If DataArquivo < DateRefe Then
		      Response.Write (DataArquivoAnalizado&" AQUI DELETA "&NomeArquivo&"<br>")
			  objFSO.DeleteFile Diretorio&"\"&NomeArquivoAnalizado
		     Else
		      Exit Do
 		     End If
		  End IF
         loop
Qualquer duvida/dica/critica/sujestao/etc é so me avisar...

abração pra todos

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.