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 |
|