Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> файлы 
V
    Опции темы
papam
Дата 14.5.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 1
Всего: 4



Подскажите почему не работает программа?
я написал программу для удаления каталогов должны удаляются все вложенные папки и файлы. 

Параметры должны передаваться через командную строку:delete.exe c:\A 
Вот код:
Код

#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);
    
    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[])
{

   char path[70];
   strcpy(path, argv[1]);
    
 
   char mask[15]="*.*";

  
   strcat(path, mask);
    
  
   _finddata_t *fileinfo=new _finddata_t;    

   
   long done = _findfirst(path,fileinfo);
    
   int MayWeWork = done;     
   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;


}

 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
bsa
Дата 14.5.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Надо писать рекурсивную функцию:
1. на входе путь к каталогу или файлу.
2. если это файл, то удаляем и выходим.
3. получаем весь список файлов/каталогов находящихся внутри него
4. идем по списку и вызываем саму себя с указателем на текущую запись в каталоге.
5. пытаемся удалить исходный каталог (который передан в качестве параметра).
 
PM   Вверх
Любитель
Дата 15.5.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Что-типа этого
Код

bool RemoveDir(cosnt char *path)
{
     if (_rmdir(path) == 0)
          return true;
     if (errno != ENOTEMPTY) // т. е. ошибка, например из-за прав доступа, ENOTEMPTY - папка не пустая
          return false;
     _finddata_t find_info;
     
     char oldPath[MAX_PATH];
     _getcwd(oldPath,MAX_PATH);
     _chdir(path);

     intptr_t find_handle = _findfirst("*",&find_info);
     if (find_handle == -1) // не можем прочитать папку
     {
          _chdir(oldPath);
          return false;
     }

     do
    {
        if (find_info.name[0] != '.')
        {
            if (find_info.attrib & _A_SUBDIR)
            {
               if (!RemoveDir(find_info.name))
               {
                   _chdir(oldPath);
                   _findclose(find_handle);
                   return false;
               }
            }
            else
            {
               if (remove(find_info.name) != 0)
               {
                   _chdir(oldPath);
                   _findclose(find_handle);
                   return false;
               }
            }
         }
     } while (_findnext(find_handle,&find_info) == 0);

     _findclose(find_handle);
     _chdir(oldPath);

    if (_rmdir(path) != 0)
        return false;
                    
    return true;
}
 


--------------------
PM MAIL ICQ Skype   Вверх
papam
Дата 15.5.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 1
Всего: 4



Компилятор  ругается:
'intprt_t' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'find_handle'
error C2065: 'find_handle' : undeclared identifier


 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
bsa
Дата 15.5.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



papam
Почитай инструкцию на findfirst и поправь. За тебя программы писать никто не будет. 
PM   Вверх
Любитель
Дата 17.5.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Компилер старый. Поставь вместо intptr_t long. 


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1053 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.