[Resolvido] busca de diretório e atributos de arquivo

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Seg 02 Jan 2012, 14:23

Estou criando pensando em criar um aplicativo muito simples, que pegasse a minha pasta de músicas, olhasse quais arquivos existem lá e gravasse tudo num arquivo de texto, pra eu importar pro excell, mandar listar e finalmente saber o que existe, afinal, nessa pasta (eu copio muita coisa de amigos e acabo nunca ouvindo tudo o que há pra se ouvir).
Mas não estou encontrando algumas funções que eu gostaria de incluir nesse aplicativo.

directory_find_first/next: Existe alguma função pra encontrar quais as sub-pastas existentes na pasta? O mais próximo que encontrei foi directory_exists, mas ela pede o nome do diretório. Eu queria uma função que me RETORNASSE o nome do primeiro diretório.
file_get_author: Tem como eu colocar no arquivo de texto qual o autor da música, além das demais propriedades que os arquivos .mp3 apresentam, como ritmo, ano, album, etc?

Se eu conseguir desenvolver esse aplicativo, minha imensa coleção de músicas que eu nunca ouvi vai ficar mais organizada e, quem sabe, posso até ouvir ao menos a metade delas!

Obrigado!


Última edição por saim em Sex 06 Jan 2012, 16:31, editado 1 vez(es)

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Convidad em Seg 02 Jan 2012, 15:44

Bem fiz uma engine que registra todos os arquivos de um diretório segundo a extensão deles :
http://www.mediafire.com/?39weceetc9anbqk

Quanto a procura por tipo de artista e tudo mais,recomendo que use alguma dll para leitura de informações de arquivos de música.

Espero ter ajudado.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Seg 02 Jan 2012, 16:31

Registrar os arquivos de um diretório definido segundo a extensão é a única parte que eu sei como fazer...
Sua engine registra as sub-pastas de um diretório? Isso será útil, se ela fizer. Vou dar uma olhada nela, ao chegar em casa.

Qual dll devo procurar, pra obter essas informações?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por PedroX em Seg 02 Jan 2012, 17:09

Isso irá gerar uma lista com as pastas dentro do diretório:
Código:
var arquivo, lista;
diretorio = working_directory ;
lista = ds_list_create();

arquivo = file_find_first(diretorio+'\*', fa_directory);
while(arquivo != ""){
if file_attributes(diretorio+'\'+arquivo, fa_directory){
ds_list_add(lista, arquivo);
}
arquivo = file_find_next();
}
file_find_close();

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Ter 03 Jan 2012, 08:06

Show de bola, Pedrø! Ainda não consegui olhar a engine do TRFN, mas esse código já esclarece muita coisa. Não sabia que as pastas podiam ser encontradas usando file_find. Acho que consigo extrapolar pra criar uma árvore de sub-pastas usando... arrays? Grids? Maps? Algo com número infinito de sub-índices.

45% resolvido!

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Convidad em Ter 03 Jan 2012, 08:31

Bem saim,uma solução de rápida execução,fora do game maker e o batch script
Vou ver se aprimoro essa engine e faço ela procurar em subpastas e somente pastas,somente arquivos,os dois ou coisas parecidas.
Assim que possível dou resposta.
Mas estude um pouco da engine que te enviei,é se possível,aprimore seus conhecimentos pesquisando um pouco mais sobre os comandos do cmd.exe pois isso ajuda muito.

Flws

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por PedroX em Ter 03 Jan 2012, 12:54

Aqui o script:
Código:
var file, path, lista;
lista = ds_list_create(); //lista com os caminhos
ds_list_add(lista,argument0); //adicionar a pasta inicial

for (i = 0; i < ds_list_size(lista); i += 1) {
path = ds_list_find_value(lista, i); //pega os caminhos
file = file_find_first(path+"\*", fa_directory); //procura

while (file != "") { //enquanto existir arquivos
//não incluir as pastas "." e ".."
if (file != "." && file != ".." && file_attributes(path+"\"+file,fa_directory))
ds_list_add(lista,path+"\"+file);

file = file_find_next(); //procura o próximo
}
  file_find_close(); //para de procurar
}
ds_list_delete(lista, 0); //[deleta a pasta inicial]
return lista;

Coloque assim no Create:
Código:
_lista = script(working_directory); //pega o id da lista gerada

E no Draw:
Código:
for(j=0; j<ds_list_size(_lista); j+=1) //desenha a lista
draw_text(10, 10+j*18, ds_list_find_value(_lista, j))

Até mais!


Última edição por Pedrø em Sex 06 Jan 2012, 12:00, editado 1 vez(es)

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por GameMakerTutoriais em Qua 04 Jan 2012, 01:14

Se você optar por batch script, tem alguns exemplos aqui.

Existe alguma função pra encontrar quais as sub-pastas existentes na pasta?

Essa linha de comando aqui vai gerar um arquivo com o caminho completo de todas as subpastas de uma pasta qualquer:
Código:
dir /b /on /ad /s "caminho da pasta" > lista.txt

Alguns outros exemplos:

Listar todos os arquivos mp3 de uma pasta (e subpastas) e gravar em um arquivo de texto, com o caminho completo de cada uma:

Código:
dir /b /on /s "caminho da pasta\*.mp3" > lista_mp3.txt

Se não quiser incluir as subpastas é só tirar o "/s" dali. Dá pra listar mais de um tipo além do mp3 de uma só vez, é só colocar uma vírgula depois do *.mp3 e colocar *.ogg por exemplo, e assim por diante.

Se quiser apenas o nome das músicas, sem extensão e sem o caminho (depois que a lista foi criada):

Código:
for /f "delims=*" %a in ('type lista_mp3.txt') do echo %~na > nomes_mp3.txt

Se as músicas estiverem na pasta "Minhas músicas" em "Meus documentos" também dá pra usar esse recurso aqui:

Código:
dir /b /on /s "%HomeDrive%%HomePath%\Meus Documentos\Minhas Músicas\*.mp3" > lista_mp3.txt

Tem como eu colocar no arquivo de texto qual o autor da música, além das demais propriedades que os arquivos .mp3 apresentam, como ritmo, ano, album, etc?

Você pode tentar criar a lista via batch script e depois usar alguma dll para mp3 no Game Maker, mas eu não conheço nenhuma, então fiz um script básico pra puxar o nome do arquivo mp3 ( http://en.wikipedia.org/wiki/ID3 ):

Cria um script com o nome "getmp3binarytag" e nele cole isso:
Código:

var flname, flopen, tag, bytechar, bytepos;

tag    := '';
flname  := argument0;
bytepos := argument1;
flopen  := file_bin_open(flname, false);

file_bin_seek(flopen, file_bin_size(flopen) - bytepos);

repeat (30)
begin
    bytechar := file_bin_read_byte(flopen);
    if not bytechar = false then tag := tag + chr(bytechar);
end;

file_bin_close(flopen);

return (tag);

Ok, agora cada um desses scripts aqui retorna o título, artista e álbum, respectivamente:

get_mp3_title:
Código:
return (getmp3binarytag(argument0, $7D));

get_mp3_artist:
Código:
return (getmp3binarytag(argument0, $5F));

get_mp3_album:
Código:
return (getmp3binarytag(argument0, $41));

Obs: algumas tags de mp3 podem estar fora do lugar (bagunça do próprio ripper que editou a tag!), se der algum erro, poste aqui pra gente tentar solucionar! Abraços e boa sorte.

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Qui 05 Jan 2012, 22:45

Testei tudo aqui, mas acho que fiz algo errado.

@TRFN
Só consegui uma room em branco. Não manjo NADA de batch, então não faço idéia se fiz algo errado.

@Pedrø: O seu script, eu MEIO que entendi. Não saquei como ele vai perceber o terceiro/quarto nível do enraizamento, mas ponho fé que vai. Só que recebi... uma room em branco, também. Pelo menos a primeira pasta eu deveria ter visto! Fiz do jeito que você sugeriu, com o working_directory no create e o draw_lista no draw. Falhei.

@Ninja8086: Ninja é pouco! Funcionou lindamente! Só que não entendi nada. Vi que você criou alguns tutoriais a respeito, vou tentar entender eles, mas tá osso. Acabou a gasolina do meu QI na primeira volta. Não tem uma explicação "for dummies", não?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Markituh em Qui 05 Jan 2012, 23:39

saim escreveu:Não saquei como ele vai perceber o terceiro/quarto nível do enraizamento
Pela quantidade de barras que ele tem. Conte a quantidade de barras e verá quantos níveis
Código:
valor = ds_list_find_value(lista, índice)
nivel = string_count("\", valor);
Mas se o que você quis dizer foi como ele vai saber que aquilo é uma sub-pasta, esse trecho explica:
Código:
while (file != "") { //enquanto existir arquivos
//não incluir as pastas "." e ".." <-----
if (file != "." && file != ".." && file_attributes(path+"\"+file,fa_directory))
ds_list_add(lista,path+"\"+file);
As "pastas" "." e ".." na verdade são referências a pasta atual e a pasta anterior, respectivamente.
Só que recebi... uma room em branco, também. Pelo menos a primeira pasta eu deveria ter visto! Fiz do jeito que você sugeriu, com o working_directory no create e o draw_lista no draw. Falhei.
Aqui foi tranquilo... Como é que você está desenhando? Alguma linha suspeita no script?

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Sex 06 Jan 2012, 08:57

Valeu, Markituh! Eu estava com um pouco de pressa, então meio que copiei-colei. Dei uma olhada no script, mas não consegui compreender tudo, sua explicação ajudou muito.

Markituh escreveu:Alguma linha suspeita no script?
Nada! Copiei o script tal como está no post do Pedrø. Se funcionou aí, DEVERIA ter funcionado aqui.
Ah, e eu fiz questão de criar pastas no local onde o jogo estava rodando, pra garantir que haveria ALGO a ser mostrado. Pode parecer óbvio, mas eu vivo caindo nesses erros crassos. Aliás, devo ter caído em algum deles de novo, vou refazer o teste e volto a postar.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Markituh em Sex 06 Jan 2012, 09:45

Nada! Copiei o script tal como está no post do Pedrø. Se funcionou aí, DEVERIA ter funcionado aqui.
Hmmm. Já que você copiou, será que não é porque o Pedro colocou um "i < ..." em vez de "j < .."? Very Happy (No Draw) Seria comum dar erro, mas em raros casos pode acontecer.


Última edição por Markituh em Sex 06 Jan 2012, 09:46, editado 1 vez(es) (Razão : Informação crucial :P)

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Sex 06 Jan 2012, 11:10

Vai lá, saim, copia e cola sem prestar atenção mesmo! Era exatamente isso, Markituh!

Pedrø, você é um gênio! Adorei a forma como o for, que deveria se encerrar no primeiro loop, cresce à medida que mais pastas vão sendo encontradas!
Não entendi porque verificar se o arquivo se encaixa nos atributos que eu pedi pra ele se encaixar. Tirei essa parte e deu erro (mostrou os outros arquivos), mas não entendi.

Agora, deixa eu ver se entendi como funciona: O "for" pega todas as pastas do diretório e joga a primeira pra variável "file". Daí, o "while" vai e joga as sub-pastas dessa pasta na lista. O for vai em pasta-por-pasta da lista e em cada pasta o while checa por sub-pastas, adicionando-as à lista se houver.
Genial!

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Markituh em Sex 06 Jan 2012, 11:46

Não entendi porque verificar se o arquivo se encaixa nos atributos que eu pedi pra ele se encaixar. Tirei essa parte e deu erro (mostrou os outros arquivos), mas não entendi.
É simples: originalmente, file_find vai encontrar um arquivo (dã), e não é isso que queremos, queremos encontrar uma pasta!

Genial mesmo! Quebrei até os miolos tentando pegar a lógica mais depois consegui entender. Já havia usado o esquema do while para pegar uma lista de arquivos numa pasta, mas essa forma nunca tinha visto!

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por PedroX em Sex 06 Jan 2012, 12:04

Hmmm. Já que você copiou, será que não é porque o Pedro colocou um "i < ..." em vez de "j < .."? Very Happy (No Draw) Seria comum dar erro, mas em raros casos pode acontecer.
Descobri um modo de pegar pessoas que fazem o copiar-e-colar.
Basta adulterar o código... Happy


É exatamente o que você e o Markituh disseram.
O loop for vai aumentando, devido ao while, em cada passo do loop for ele fecha a busca e inicia no passo seguinte, se houver uma pasta adicionada pelo loop while.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Convidad em Sex 06 Jan 2012, 13:13

Oi saim,agora dei uma melhorada na engine,agora vocÊ vai conseguir usar.
Como vejo que houveram respostas mais precisas,sei que nem irás usar minha ideia,mas como todo conteúdo de aprendizado e bom,estou te disponibilizando esta nova versão da engine,espero que goste.

http://dl.dropbox.com/u/55533669/Desktop.zip

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por saim em Sex 06 Jan 2012, 15:28

Pedrø escreveu:Descobri um modo de pegar pessoas que fazem o copiar-e-colar.
Basta adulterar o código... Happy
Busted!!! :oops:
Outra forma menos sutil de se fazer isso é mandando loops como
Código:
for(i = 0; i < 5; i += 1){
//código
i -= 1; //comentário pedindo pra apagar essa linha
}

TRFN, vou dar uma olhada sim, com certeza! Mas é que seu exemplo (pelo menos o anterior) usa programação em batch. Eu só conheço GML (infelizmente). Um pouQUINHO de java, e olhe lá.
A lógica é quase sempre a mesmo, mas a sintaxe do arquivo que você mandou em anexo ao .gmk, pra mim, é indecifrável. E, pelo que entendi, é nele que fica toda a graça do código...

Agora é entender o código do ninja. Haja massa cinzenta pra acompanhar vocês...

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Convidad em Sex 06 Jan 2012, 15:31

kkkk
Haja massa cinzenta pra acompanhar vocês...

Bem cara,de qualquer forma,garanto que agora vai tudo funcionar,olha as atualizações que fiz :
Atualizei o arquivo Batch : ele agora é mais leve .
Atualizei o GMK : Agora é mais dinâmico.....
Não tem erro,espero que possas aprender algo ae,pois o batch é bem útil,quando descobri como funcionava,aprendi muitas coisas.


Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: [Resolvido] busca de diretório e atributos de arquivo

Mensagem por Conteúdo patrocinado Hoje à(s) 08:54


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum