Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Работа с файлами в С\С++


Автор: karas 25.8.2005, 22:42
Помогите разобраться!!!
Почему не работает код(не удаляются папки и файлы)? smile
Код

#include <stdio.h>    // Здесь находятся функции переименования и удаления
#include <io.h>       // Здесь находятся функции для поиска файлов
#include <string.h>  
#include <windows.h> 
#include <iostream.h> 
#include <direct.h> 


// Максимальная длина пути к файлу
#define MAX_PATH 260
// Размер вспомогательных массивов
#define Size 50

    _finddata_t find;

char* RussianMessage(char path[]){
    CharToOem(path,path);
    return path;
}

void RemoveFile(_finddata_t *f) // Удалить существующий файл
{
    char Name[MAX_PATH];
    // Что будем удалять?
    strcpy(Name, f->name);
    // Функция remove из stdio.h удаляет файл с указанным именем. Возращает
    // НЕНУЛЕВОЕ значение, если попытка удаления оказалась неудачной. 
    if (remove(Name)!=0)
    {cout << "\nError!\n Couldn't remove file."<< endl;
            RussianMessage(Name);
            printf("%s>",Name);}

    else 
    {cout << "Ok..." <<endl;
    RussianMessage(Name);
    printf("%s>",Name);}
}

void RemoveDir(_finddata_t *f)
{
if(_rmdir(f->name)!=0)    {cout << "\nError!\n Couldn't remove directory."<< endl;
                        RussianMessage(f->name);    
                        printf("%s>",f->name);}
    else 
    {cout << "Ok..." <<endl;
    RussianMessage(f->name);
    printf("%s>",f->name);}
}

void main(int argc, char * argv[])

{


   // Запросим ПУТЬ (например, папка Temp на диске C, запишется 
   // таким вот образом: c:\temp\)
   char path[70];
strcpy(path, argv[1]);
    
   // Запросим маску файлов (что такое маска?
   // маска задается с использованием символов * и ?
   // где звездочка-заменяет любую последовательность символов,
   // а ?  - любой символ (но только один)
   // К примеру, *.txt - найти любой файл с расширением txt
   char mask[15]="*.*";

   // Соединив две строки, мы получим результат
   // т.е. что хочет найти пользователь и где
   strcat(path, mask);
    
   // Объявление указателя fileinfo на структуру _finddata_t
   // и создание динамического объекта структуры _finddata_t
   // Данная структура помогает задать критерии поиска
   _finddata_t *fileinfo=new _finddata_t;    

   // Функция _findfirst() принимает два параметра: где и что искать, 
   // Второй параметр, указатель на структуру _finddata_t
   // Если функция не сможет успешно отработать - то она вернет -1,
   // в противном случае, переменная done будет содержать уникальный 
   // номер полученной группы файлов, удовлетворяющих заданному условию 
   // поиска. То есть файлы, которые удовлетворяют критерию поиска 
   // представляют собою как бы группу, к которой в дальнейшем мы сможем 
   // обратиться, через функцию _findnext
   long done = _findfirst(path,fileinfo);
    
   int MayWeWork = done;    // если done будет равняться -1, то поиск 
   // вести бесмысленно (почему? смотри комментарии выше)

   // Счетчик, содержит информацию о количестве найденых файлов.    
   int count = 0;   
   while (MayWeWork!=-1)
   {    
      count++;
      // Распечатали имя найденного файла
    
      if(strcmp(fileinfo->name,".")&&strcmp(fileinfo->name,"..")){
            // Проверяем Директория или Нет
            fileinfo->attrib&_A_SUBDIR?RemoveDir(fileinfo):RemoveFile(fileinfo);}


      // Пытаемся найти следующий файл из группы
      MayWeWork = _findnext(done, fileinfo);        
   }
   // Расскажем о том, что мы нашли...
   cout << "\nInformation: was found " << count
        << " file(s) in folder..." << path << endl;

   _findclose(done);
   delete fileinfo;


}
smile

Автор: Pakshin A. S. 28.8.2005, 15:07
Модератор: Кнопку Report не для общения придумали!!!! О чем там и говорится:

"Эта форма должна быть использована ТОЛЬКО для доклада о НАРУШЕНИИ ПРАВИЛ ФОРУМА в сообщении и ни в коем случае не как средство общения и связи."

Но на первой прощаю и переношу в форум по C\C++

Автор: asdf 28.8.2005, 16:10
вставь это на 59-у строку
Код

chdir(path);

Автор: karas 29.8.2005, 17:45
shurick ого! ну ты шаман, здорово ты это!Спасибо ОГРОМНОЕ, выручил! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)