Curso completo de DarkGdk
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 16.1
16.1 Introdução ao sistema de arquivos
1.1 Visão geral
A DarkGdk oferece funções para realizar as operações de sistemas de arquivos
como criar, renomear e deletar pastas; copiar, deletar e renomear arquivos
comuns.
Além das funções que DarkGdk oferece, você pode utilizar as funções de
manipulação de arquivos da linguagem C++, e de maneira avançada você pode
utilizar diretamente as funções respectivas peculiares do sistema Windows.
As funções de gerenciamento de pastas e arquivos são importantes para você
controlar o conteúdo do seu jogo e realizar processos de instalação quando
necessário.
Vamos ver as seguintes funções neste tópico:
dbCD() dbSetDir() dbGetDir() dbDir()
dbDriveList() dbWindir() dbAppname() dbFileExist()
dbPathExist() dbExecuteFile()
Nos velhos sistemas operacionais de linha de comando, as pastas eram chamadas
de diretórios. Usamos aqui pastas e diretórios exatamente significando a mesma
coisa.
sWindir = dbWindir();
char* dbWindir ( void );
Esta função retorna o diretório de instalação do sistema Windows.
Ex.: dbPrint ( dbWindir() );
---------------------------------------------------------------------------
sPrograma = dbAppname();
char* dbAppname ( void );
Essa função retorna a linha de comando com nome e caminho da sua aplicação.
Ex.: dbPrint ( dbAppname() );
---------------------------------------------------------------------------
dbDir()
void dbDir ( void );
Esta função exibe o conteúdo do diretório corrente.
Ex.: dbDir();
---------------------------------------------------------------------------
dbDriveList()
void dbDriveList ( void );
Esta função exibe uma lista de drives do sistema
Ex.: dbDriveList();
1.2 Funções principais
Agora vamos ver as funções mais úteis que certamente você vai usá-las
com mais frequência:
sPasta = dbGetDir();
char* dbGetDir( void );
Esta função retorna o diretório corrente.
Ex.: dbPrint( dbGetDir() );
---------------------------------------------------------------------------
dbCD( sPasta);
void dbCD ( char* pPath );
Esta função estabelece o diretório corrente.
Ex.: dbCD( "c:\\Gameprog\\gdkMedia\\Instalador" );
(*) Importante:
Na denominação de caminhos ou no uso de strings e texto no seu programa
você deverá usar duas barras ("\\") para utilizar a barra como parte
da string tal como no exemplo acima. Isso é necessário porque em C/C++
essa barra é utilizada para assinalar caracteres especiais.
---------------------------------------------------------------------------
nsts = dbFileExist( sArquivo);
int dbFileExist ( char* pFilename );
Esta função retorna 1 caso o arquivo especificado exista.
Ex.:
if ( dbFileExist("c:\\windows\\notepad.exe") == 1)
dbPrint("O arquivo c:\\windows\\notepad.exe existe!");
---------------------------------------------------------------------------
nsts = dbPathExist( sCaminho);
int dbPathExist ( char* pFilename );
Esta função retorna 1 caso o caminho especificado exista.
Ex.:
if ( dbPathExist("c:\\windows\\media") == 1)
dbPrint("A pasta c:\\windows\\media existe!");
---------------------------------------------------------------------------
dbSetDir( sPasta);
void dbSetDir ( char* pString );
Esta função estabelece o diretório corrente, podendo o diretório ser
estabelecido relativamente ao diretório corrente atual.
Ex.: dbSetDir("..\\BCC55");
' ..\BCC55 ' aqui pressupomos que existe um diretório BCC55 antes do diretório
atual.
---------------------------------------------------------------------------
nsts = dbExecuteFile( sPrograma, sCaminho, sDiretorio);
void dbExecuteFile ( char* pFilename, char* pFilename2, char* pFilename3 );
Esta função executa uma aplicação.
Ex.:
dbExecuteFile("notepad.exe","c:\\windows\\win.ini","");
Em nosso exemplo abrimos o arquivo win.ini que fica em c:\windows.
Conserve esse arquivo do jeito que está. Cuidado para não modificá-lo
pois ele é um arquivo importante de configuração especialmente para
rodar programas antigos do Windows.
Veja nosso programa exemplo:
// SistemaArquivos.cpp
// Este programa testa funções de sistema de arquivos
#include "DarkGDK.h"
// Protótipo das funções
void initsys(); // inicializa o sistema
void avisar(char *cText); // Exibe um aviso
void testar_dir(); // Testa funções de sistema de arquivos
// ----------------------------------------------------------------------------
void DarkGDK ( void ) {
// Começo da aplicação DarkGdk
initsys();
testar_dir();
// Looping principal
while ( LoopGDK ( ) ) {
dbSync ( );
if (dbMouseClick()==2) {
dbSync();
MessageBox(0,"Rodando notepad.exe", "dbExecuteFile()", MB_OK);
dbExecuteFile("notepad.exe","c:\\windows\\win.ini","");
} // endif
} // fim do while
return;
} // endfunction DarkGDK()
// ----------------------------------------------------------------------------
void initsys() {
// Esta função inicializa o sistema
dbSyncOn( );
dbSetDisplayMode (800,600,32);
dbSetWindowSize(800,600);
dbCLS ( dbRGB(0,0,255));
dbInk( dbRGB(255,255,255), dbRGB(0,0,255) );
dbSetWindowTitle("SistemaArquivos.cpp"); dbSetTextOpaque();
} // initsys().fim
// ----------------------------------------------------------------------------
void avisar(char * cText) {
dbPrint(" ");
dbPrint(cText);
dbPrint("-------------------------------------------------------------------");
} // endfunction avisar()
void testar_dir() {
avisar(" dbCD() dbSetDir() dbGetDir() dbDir():");
dbCD("c:\\Gameprog");
dbPrint( dbGetDir() ); dbSetDir("..\\BCC55");
dbDir();
avisar(" dbDriveList():"); dbDriveList();
avisar(" dbWindir() dbAppname():");
dbPrint ( dbWindir() );
dbPrint ( dbAppname() );
avisar(" dbFileExist() dbPathExist()");
if ( dbFileExist("c:\\windows\\notepad.exe") == 1)
dbPrint("O arquivo c:\\windows\\notepad.exe existe!");
if ( dbPathExist("c:\\windows\\media") == 1)
dbPrint("A pasta c:\\windows\\media existe!");
avisar("...botao direito do mouse para testar dbExecuteFile()");
} // endfunction testar_dir()