C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Перенос файлов, Перенос файлов в другую директорию
maripossa
Отправлено: 08.02.2006, 21:49


Ученик-кочегар

Группа: Участник
Сообщений: 8



Есть две директории, в 1-й много файлов. Необходимо выбрать файлы с определенным расширением и перенести их во 2-ю директорию при этом создавая в ней поддиректории (например начиная с '1' и т.д) в каждую из которых помещается, например по 100 файлов из первой директории. Подскажите как это можно реализовать(если можно исходник), очень нужно! Заранее спасибо.
viva
Отправлено: 09.02.2006, 06:09


Дежурный стрелочник

Группа: Участник
Сообщений: 31



CODE

#include <idglobal.hpp>
void __fastcall CopyFiles(AnsiString InDir,AnsiString OutDir,int N)
{
 int cnt=N,myNDir=1;
 AnsiString myOutDir;
 TSearchRec FinD;
 myOutDir=IncludeTrailingPathDelimiter(OutDir+AnsiString(myNDir));
 if(!DirectoryExists(myOutDir)) CreateDir(myOutDir);

 int Code=FindFirst(InDir+"*.*",faAnyFile,FinD);
 while(Code==0)
 {
   if(FinD.Name!="." && FinD.Name!="..")
   {
     CopyFileTo(InDir+FinD.Name,myOutDir+FinD.Name);
     if(--cnt==0)
     {
       ++myNDir; cnt=N;
       myOutDir=IncludeTrailingPathDelimiter(OutDir+AnsiString(myNDir));
       if(!DirectoryExists(myOutDir)) CreateDir(myOutDir);
     }
   }
   Code=FindNext(FinD);
 }
}
maripossa
Отправлено: 09.02.2006, 22:31


Ученик-кочегар

Группа: Участник
Сообщений: 8



Огромное спасибо, viva!!! Работает отлично!
maripossa
Отправлено: 09.02.2006, 23:03


Ученик-кочегар

Группа: Участник
Сообщений: 8



Viva, ещё один вопрос. После копирования CopyFileTo(InDir+FinD.Name,myOutDir+FinD.Name) я файлы удаляю DeleteFile(InDir+FinD.Name), т.е. очищаю входную директорию(файлы там появляются постоянно). Я работаю с таймером, т.е. процедура будет запускается после определенного промежутка времени (отслеживание появления файлов во входной директории), как продолжить создание подкаталогов в выходной директории которое началось с myNDir=1?

Grigoriy
Отправлено: 10.02.2006, 02:22


Мастер участка

Группа: Участник
Сообщений: 381



Ребят, а зачем вы сначала файлы копируете и потом удаляете ?
Ведь можно просто переименовывать полный путь к файлу и тогда он просто и главное быстро перенесется с одного каталога в другой, при этом изменится только содержимое каталогов.
viva
Отправлено: 10.02.2006, 07:36


Дежурный стрелочник

Группа: Участник
Сообщений: 31



QUOTE
которое началось с myNDir=1?

Сделать myNDir глобальной, или хранить в файле, или в реестре, или ресурсах — вариантов много — принимай решение сам.
ага...
Отправлено: 06.03.2006, 14:25


Не зарегистрирован







А подскажите как перетащить папку с дика E:/ на C:/...
Папка с файлами.

Заранее спасибо.

Grigoriy
Отправлено: 06.03.2006, 15:19


Мастер участка

Группа: Участник
Сообщений: 381



Если файлы папки "E:/" предназначены компакт-диску и только для чтения, то никак нельзя их перенести, потому что файлы из папки "E:/" должны удалиться. В этом случае можно только скопировать файлы.

Например папка "E:/" — это корневой каталог CD-ROM.
Как известно на СИДИ файлы предназначены только для чтения.
И открывать эти файлы нужно в режиме "открыть ... файл только для чтения", иначе файл вовсе не откроется !

Отредактировано Grigoriy — 06/03/2006, 15:27
Guest
Отправлено: 06.03.2006, 15:25


Не зарегистрирован







Посмотрите возможности функции SHFileOperation

Вернуться в Вопросы программирования в C++Builder