IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила форума Всем прочитать перед созданием темы!
 
Ответить в данную темуНачать новую тему
Копирование файло, директорий и поддиректорий на C++
сообщение 4.03.2003 - 18:15
Сообщение #1





Группа:
Пользователь №:
Сообщений: 0
Регистрация: --
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: раз(а)

Рейтинг: < -10 ( ) 10 >


Люди! Помогите!!! Как скопировать целую директорию с вложенными в нее попками и файлами на С++??? Функция IMAPISupport::CopyFolder не работает (хотя, может неадер какой я не добавил?). Работает только CopyFile, но она не копирует директории и все файлы по маске *.*
Помогите, pls!!! Спасибо.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Oleg Rodnin
сообщение 16.09.2003 - 20:22
Сообщение #2


Новичок
Иконка группы

Группа: Пользователи
Пользователь №: 738
Сообщений: 9
Регистрация: 10.04.2003
Из: St-Petersburg, Russia
Загружено: байт
Скачано: байт
Коэффициент: ---
Спасибо сказали: 0 раз(а)



Поможет выполнению этой задачи рекурсивная функция. Принцип следующий : копируем файлы и папки, причем когда встречаем папку - натравливаем на ее содержимое ту же функцию "изнутри".

Для копирования папок используем CreateDirectory.

Копирование файлов из папки : используем поиск файлов (CFileFind), и каждый найденный файл копируем обычной функцией CopyFile.

На ошибки не смотрим.
Код
void CopyFolder(CString strFrom, CString strTo)
{
  //strFrom - имя папки, откуда  копировать
  //strTo - имя папки, куда  копировать

  //убедимся, что имена заканчиваются слэшем, если нет - добавим
  if (strTo.Right(1) != "")
     strTo += '';
  if (strFrom.Right(1) != "")
     strFrom += '';

  //создаем ("копируем") текущую папку
  CreateDirectory(strTo, NULL) != FALSE;

  //будем перебирать все файлы и папки в текущей
  CFileFind finder;
  CString strName = strFrom + "*.*";
 
  BOOL bWorking = finder.FindFile(strName);
  while (bWorking)
  {
     bWorking = finder.FindNextFile();
     CString strFilePath = finder.GetFilePath();
     CString strFileTitle = finder.GetFileTitle();
     //отсекаем "." и ".."
     if (!finder.IsDots())
     {
        if (finder.IsDirectory())
           //рекурсивное погружение в найденную папку (strTo + strFileTitle)
           CopyFolder(strFilePath, strTo + strFileTitle);
        else
           //просто копируем файл
           CopyFile(strFilePath, strTo + strFileTitle, false);
     }
  }

  finder.Close();
 
}


PS
IMAPISupport это совсем из другой области...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19.04.2024 - 07:04