X for Dummies

Carregar arquivos de um diretório (usando WinApi)

Publicado em AX40, Funcional, Tutoriais, X++, 28/05/2009, por Edvandro Santos

0


Pois é, depois de um longo tempo, voltei. Muito trabalho, somado a uma preguiça sem igual dá nisso…

[…]

Seguindo os posts relacionados à X++ e sua abrangência – I/O, Query objects, Transactions, Application Integration, etc. – hoje vamos aprender como carregar arquivos de um determinado diretório usando uma classe WinApi, classe do AX com métodos estáticos que dão informações sobre o SO instalado em geral, como espaço em disco, sistema de arquivos, nome e versão do SO, entre outros.

Basicamente vou utilizar dois métodos dessa classe:

  1. findFisrtFile: Obtém o primeiro arquivo a partir dum diretório especificado;
  2. findNextFile: Obtém o próximo arquivo do diretório, a partir do seu índice.

O job é simples: defino um diretório (C:\Temp) e a extensão dos arquivos que quero listar (*.xls). Em seguida, procuro pelo primeiro arquivo desse diretório e obtenho seu índice e o nome. Dentro de um loop, vou imprimindo o nome dos arquivos da extensão sugerida na janela de informações.

Outra característica interessante do X++, é a possiblidade de criar inner functions. No meu caso, criei uma para me enviar o caminho completo da aplicação, embora não haveria necessidade de fazê-lo, mas, a fim de apresentar o poder da linguagem, vale a “firula”, 🙂

Abaixo, os principais pontos do Job

Definindo tipos básicos

#define.fileExtension("*.xls")   // Extensão do arquivo desejado a ser listado no diretório
FilePath filePath = "C:\\Temp";  //Diretório
int hd1; //Índice que armazena a localização do cursor do arquivo no diretório

//Função interna para "montar" o  caminho completo dos arquivos no diretório
FileName fullFileName(FileName _path, FileName _fileName)
{
 FileName path, file, extension;
 ;

 [path, file, extension] = fileNameSplit(_fileName);

 return _path + '\\' + file + extension;

}
;

Lendo os arquivos do diretório

fullFileName = fullFileName(filePath, #fileExtension); //função interna criada para "montar" o caminho completo do arquivo

[hd1, fileName] = WinApi::findFirstFile(fullFileName); //Obtendo o primeiro arquivo do diretório e retornando a posição do cursor

 while(fileName)
 {
 print(strfmt("Arquivo: %1", fileName)); // Exibindo o nome do arquivo
 fileName = WinApi::findNextFile(hd1);  // Obtendo o próximo arquivo a partir da posição do cursor
 }

Com essas informações, o job já está apto a carregar os arquivos do diretório. Daí em diante podemos fazer o que quisermos com os arquivos, uma vez que temos o caminho completo e o nome do mesmo.

Para fazer download do job, clique aqui

Abraços,até  próxima!


Posts relacionados


    Fatal error: Call to undefined function wp_related_posts() in /home/storage/8/42/49/axfordummies/public_html/wp-content/themes/axfordummies/single.php on line 33