google
Зарегистрирован: 12.04.2005 Сообщения: 1
|
Добавлено: Вт Апр 12 2005 09:57 Заголовок сообщения: Системные папки |
|
|
Подскажите, пожалуйста, как ичистить папки, в которых содержиться интернет-кэш и куки (например - C:\Documents and Settings\username\Local Settings\Temporary Internet Files\Content.IE5) . На С, С++, Pascal. Дело в том, что никакие функции API этих папок, как папки не видят или я что-то не так делаю. |
|
Andrey Grigoriev
Зарегистрирован: 24.06.2004 Сообщения: 17 Откуда: Орел, Россия
|
Добавлено: Вт Апр 12 2005 21:01 Заголовок сообщения: |
|
|
Вот так работает:
Код: |
#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
int WipeAll(const char *path);
void PrintLastError();
int main()
{
char s[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PROFILE, NULL, SHGFP_TYPE_CURRENT, s);
strcat(s, "\\Local Settings\\Temporary Internet Files\\Content.IE5");
WipeAll(s);
return 0;
}
int WipeAll(const char *path)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
char pp[MAX_PATH];
strcpy(pp, path);
strcat(pp, "\\*.*");
if ( (hFind = FindFirstFile(pp, &fd)) == INVALID_HANDLE_VALUE )
return -1;
do {
// printf("%s\n", fd.cFileName);
if ( (strcmp(fd.cFileName, ".") == 0) || (strcmp(fd.cFileName, "..") == 0) )
continue;
char buf[MAX_PATH];
strcpy(buf, path);
strcat(buf, "\\");
strcat(buf, fd.cFileName);
if ( !SetFileAttributes(buf, FILE_ATTRIBUTE_NORMAL) ) {
printf("Failed to set attributes of \"%s\" reason: ", buf);
PrintLastError();
continue;
}
if ( fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
WipeAll(buf);
if ( !RemoveDirectory(buf) ) {
printf("cannot delete directory \"%s\". Reason: ", buf);
PrintLastError();
}
} else if ( !DeleteFile(buf) ) {
printf("File \"%s\" deletion failed. Reason: ", buf);
PrintLastError();
}
} while ( FindNextFile(hFind, &fd) );
FindClose(hFind);
return 0;
}
void PrintLastError()
{
LPVOID lpMsgBuf;
if (!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL ))
{
// Handle the error.
return;
}
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
char buf[1024];
CharToOem((LPCTSTR)lpMsgBuf, buf);
printf("%s\n", buf);
// Free the buffer.
LocalFree( lpMsgBuf );
}
|
Я снимаю с себя всю ответственность за то, что эта хрень может чего-то накосячить на чьей-то системе. На моей она очищает указанный в первом посте каталог для текущего пользователя. Под 98 виндой эта программа работать вообще не должна |
|