Excluir arquivos usando curingas (*.*) em C
como eu poderia escluir arquivos de uma pasta usando curingas em C
Rafaelgardini
Curtidas 0
Respostas
Massuda
06/02/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].
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].
GOSTEI 0
Rafaelgardini
06/02/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].
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
GOSTEI 0
Massuda
06/02/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.
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.
GOSTEI 0
Rafaelgardini
06/02/2005
Tenho 2 opções de Compiladores o C++ BuilderX e o devcpp
GOSTEI 0
Rafaelgardini
06/02/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
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
GOSTEI 0
Massuda
06/02/2005
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.
GOSTEI 0
Rafaelgardini
06/02/2005
Sim positivo do jeito que esta compila perfeitamente
GOSTEI 0
Massuda
06/02/2005
No exemplo, a variável DirSpec recebe a especificação da pasta/diretório. Então, ao invés de fazer...você pode fazer
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:
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 }
GOSTEI 0
Rafaelgardini
06/02/2005
Vlw funcionou!!! :P
GOSTEI 0