Array
(
)

Excluir arquivos usando curingas (*.*) em C

Rafaelgardini
   - 06 fev 2005

como eu poderia escluir arquivos de uma pasta usando curingas em C


Massuda
   - 08 fev 2005

A resposta depende de qual compilador você está usando e, principalmente, qual é sua plataforma alvo (Windows, Linux, .NET).

Assumindo que sua plataforma alvo seja Windows, você pode usar as funções [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findfirstfile.asp]FindFirstFile[/url], [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findnextfile.asp]FindNextFile[/url] e [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findclose.asp]FindClose[/url]. Um exemplo de como usar essas funções está [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/listing_the_files_in_a_directory.asp]neste artigo do MSDN[/url].


Rafaelgardini
   - 08 fev 2005


Citação:
A resposta depende de qual compilador você está usando e, principalmente, qual é sua plataforma alvo (Windows, Linux, .NET).

Assumindo que sua plataforma alvo seja Windows, você pode usar as funções [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findfirstfile.asp]FindFirstFile[/url], [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findnextfile.asp]FindNextFile[/url] e [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findclose.asp]FindClose[/url]. Um exemplo de como usar essas funções está [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/listing_the_files_in_a_directory.asp]neste artigo do MSDN[/url].



O código neste artigo preciza ser implementado ou ele jah vem pronto eh que sou meio novo em c e estou fazendo uma aplicaçãozinha que limpa os arquivos temporarios da internet qndu inicia o pc


vlw


Massuda
   - 08 fev 2005

Não entendi o que você quis dizer com ´o código precisar ser implementado ou já vir pronto´, mas o exemplo implementa uma aplicação similar ao comando DIR do Prompt de Comando.

O exemplo deve compilar sem problemas com qualquer compilador para Windows que permita gerar aplicativos console; a princípio, bastaria alterar o exemplo de listar arquivos para deletar arquivos.

Dependendo do compilador que você está usando, podem existir modos mais simples de fazer isso.


Rafaelgardini
   - 08 fev 2005

Tenho 2 opções de Compiladores o C++ BuilderX e o devcpp


Rafaelgardini
   - 08 fev 2005

#define _WIN32_WINNT 0x0501

include <windows.h>
include <string.h>
include <stdio.h>

int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
DWORD dwError;

printf (´Target directory is ¬s.\n´, argv[1]);
strncpy (DirSpec, argv[1], strlen(argv[1])+1);
strncat (DirSpec, ´\\*´, 3);

hFind = FindFirstFile(DirSpec, &FindFileData);

if (hFind == INVALID_HANDLE_VALUE)
{
printf (´Invalid file handle. Error is ¬u\n´, GetLastError());
return (-1);
}
else
{
printf (´First file name is ¬s\n´, FindFileData.cFileName);
while (FindNextFile(hFind, &FindFileData) != 0)
{
printf (´Next file name is ¬s\n´, FindFileData.cFileName);
}

dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
{
printf (´FindNextFile error. Error is ¬u\n´, dwError);
return (-1);
}
}
return (0);
}
----------------------------------------------------------------------------
se nao for pedir muito me de um exemplo de como ficaria o codigo acima com o caminho c:\teste


grato


Massuda
   - 08 fev 2005


Citação:
se nao for pedir muito me de um exemplo de como ficaria o codigo acima com o caminho c:\teste
Eu não conheço os dois compiladores que você citou e, portanto, não seria capaz de dizer se esse exemplo compila com eles.

Então... antes de modificar o exemplo talvez fosse melhor ter certeza que você consegue compilar o exemplo como está.

Compile o exemplo (não sei dizer como fazer isso com esses compiladores) e teste. Quando tudo estiver OK, avise aqui.


Rafaelgardini
   - 08 fev 2005

Sim positivo do jeito que esta compila perfeitamente


Massuda
   - 09 fev 2005

No exemplo, a variável DirSpec recebe a especificação da pasta/diretório. Então, ao invés de fazer...#Código

printf ("Target directory is ¬s.\n", argv[1]); 
strncpy (DirSpec, argv[1], strlen(argv[1])+1);
você pode fazer#Código
strcpy (DirSpec, "c:\\teste");


Para excluir o arquivo, use a função [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/deletefile.asp]DeleteFile[/url].

Antes de tentar excluir um arquivo, teste se FindFirstFile/FindNextFile realmente encontrou um arquivo, pois pode retornar também as entradas de diretório para o diretório pai (´..´) e o diretório atual (´.´). Para isso, verifique se o campo dwFileAttributes da estrutura [url=http://msdn.microsoft.com/library/en-us/fileio/base/win32_find_data_str.asp]WIN32_FIND_DATA[/url] não contem o atributo FILE_ATTRIBUTE_DIRECTORY; por exemplo:#Código
if !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
// FindFileData.cFileName possivelmente é um arquivo
}



Rafaelgardini
   - 09 fev 2005

Vlw funcionou!!! :P