Excluir arquivos usando curingas (*.*) em C
06/02/2005
0
Rafaelgardini
Posts
08/02/2005
Massuda
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].
08/02/2005
Rafaelgardini
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
08/02/2005
Massuda
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.
08/02/2005
Rafaelgardini
08/02/2005
Rafaelgardini
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
08/02/2005
Massuda
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.
09/02/2005
Massuda
printf ("Target directory is ¬s.\n", argv[1]); strncpy (DirSpec, argv[1], strlen(argv[1])+1);
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] [b:5c73a2ce12]não[/b:5c73a2ce12] contem o atributo FILE_ATTRIBUTE_DIRECTORY; por exemplo:
if !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // FindFileData.cFileName possivelmente é um arquivo }
Clique aqui para fazer login e interagir na Comunidade :)