Показать сообщение отдельно

  #2  
Старый 15.11.2009, 04:34
Linkus
Участник форума
Регистрация: 20.12.2008
Сообщений: 130
Провел на форуме:
436500

Репутация: 11
По умолчанию

Цитата:
Сообщение от draliokero  
Помогите с кодом, нужно пробежаться с указанного начального каталога по его подкаталогам, удаляя из них файлы с расширениями *.@@@,*.bla, *.sdx.
В коде куча лишнего хлама, ибо вырезано кое-как из совсем другого проекта удачи!

Код:
#include <stdio.h>
#include <windows.h>

HANDLE ch;

DWORD WriteToConsole(LPSTR text)
{
  DWORD nChars;
  char buf[MAX_PATH];
  strcpy(buf,text);
  strcat(buf,"\r\n");
  char buf2[MAX_PATH];
  CharToOem(buf,buf2);
  WriteConsole(ch,buf2,strlen(buf2),&nChars,0);

  return nChars;
}

void FindAndDelete(LPSTR path, LPSTR name )
{

	WIN32_FIND_DATA wfd;
        HANDLE fh;
        char lol[MAX_PATH];
        strcpy(lol,path);
        strcat(lol,"*");
        fh = FindFirstFile(lol,&wfd);

	if(fh == INVALID_HANDLE_VALUE) return;

        do
        {

           if (strstr(wfd.cFileName,name) != NULL)
          {

                  char delfilebuf[MAX_PATH];
                  strcpy(delfilebuf,path);
                  strcat(delfilebuf,wfd.cFileName);
                  WriteToConsole(delfilebuf);
                  //Удаляем файл
                  DeleteFile(delfilebuf);

            }

                        if ((!strcmp(wfd.cFileName,".")) || (!strcmp(wfd.cFileName,".."))) continue;

                           if (wfd.dwFileAttributes ==FILE_ATTRIBUTE_DIRECTORY)
                           {

                                                char pathbuf[MAX_PATH];
                                                strcpy(pathbuf,path);
                if (pathbuf[strlen(pathbuf)-1] != '\\') strcat(pathbuf,"\\");
                                                strcat(pathbuf,wfd.cFileName);
                if (pathbuf[strlen(pathbuf)-1] != '\\') strcat(pathbuf,"\\");


                FindAndDelete(pathbuf,name);

                           }


        } while (FindNextFile(fh,&wfd));

        FindClose(fh);

        return;

}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
        AllocConsole();
        ch = GetStdHandle(STD_OUTPUT_HANDLE);

        //Запускаем рекурсивную функцию
        //Её параметры: путь к стартовой папке и 
        // расширение удаляемых файлов (с точкой!)
        // удаляет файлы с заданным расширением в
        //стартовой папке,  её подпапках, и их подпапках, и их
        //подпапках))))) etc
        FindAndDelete("D:\\tst\\",".\@\@\@");
        FindAndDelete("D:\\tst\\",".bla");
        FindAndDelete("D:\\tst\\",".sdx");

        system("pause");



        return 0;
}
 
Ответить с цитированием