![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте!
Такой вопрос: Использую данную функцию для перемещения каталогов с файлами: Код:
function MoveDir(fromDir, toDir: String): Boolean; // функция перемещения файлов var fos: TSHFileOpStruct; toDir2: string; begin toDir2 :=toDir; ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_MOVE; //fFlags := FOF_FILESONLY; fFlags:= FOF_SIMPLEPROGRESS; fflags:= fflags or FOF_NOCONFIRMATION; fflags:= fflags or FOF_SILENT; pFrom := PChar(fromDir + #0); pTo := PChar(toDir2); end; Result := (0 = ShFileOperation(fos)); end; |
|
#2
|
||||
|
||||
|
Как не извращался, ситуацию повторить не удалось, папка успевает успешно "улететь" в нужную директорию до копирования в неё новых файлов, но возможно здесь не хватает принудительной установки текущей папки посредством SetCurrentDirectory
Код:
... ZeroMemory(@fos, SizeOf(fos)); SetCurrentDirectory(PChar(toDir2)); ... |
|
#3
|
|||
|
|||
|
Спасибо большое Вам за ответ, да действительно ситуация немного нестандартная, я думал поставить что то типа directoryexist, но не знаю как правильно это оформить. как попробую тогда отпишусь.
|
|
#5
|
|||
|
|||
|
Попробовал изменить адресацию и добился.... теперь и вовсе при повторном переносе если в конечной папке такое имя каталога есть он 100% создает в нем еще одну папку. реализовано вот так.
Код:
for i:=0 to memo2.lines.count-1 do
if (memo2.Text<>'') and (combobox1.Text<>'') then
begin
try
if checkbox8.Checked=false then
MoveDir(combobox1.Text+memo2.Lines[i], ExtractFileDir(Application.ExeName)+'\tails\'+memo2.Lines[i])
else
MoveDir(combobox1.Text+memo2.Lines[i], edit3.text+'\tails\'+memo2.Lines[i]);
except
end; |
|
#6
|
|||
|
|||
|
где то очевидная ошибка... помогите ее увидеть
|
|
#7
|
||||
|
||||
|
Я так понимаю, пока папка сносится на новое место, она тут же возрождается из другого процесса - тогда возможно в цикле следует убедиться в переносе предыдущей перед следующей итерацией (if MoveDir() then...) Не удалось добиться такой ситуации, хоть и копировалось в "феникса" несколько сот рандомных *.тхт файлов, они тут же улетали в нужном направлении, без дополнительных вложенных папок
|
|
#8
|
|||
|
|||
|
Конкретно мой изложенный код в данный момент, (у меня по крайней мере),гнусно "косячит" и проверяется очень просто: из папки А в папку Б указанным выше способом произвожу перенос папки С. Грубо говоря, было ...А\С стало ...Б\С. Все пока что хорошо. В папке А снова ручками создаю папку С и повторяю сие чудесное действие с переносом. И вуаля, фокус удался! Было ...А\С стало Б\С\С. И вот вторая папка С уже становится последним пристанищем всех вновь прибывающих файлов папок итд. (Хорошо хоть так)
уже задумываюсь писать отдельную софтинку чтобы поправляла эту беду в конечном каталоге, но мне кажется это глупо. Истина где то рядом...пробовал другие функции и процедуры по перемещению они не подходят поэтому и зацепился за эту... |
|
#9
|
|||
|
|||
|
Пробовал кстати через CurrentDirectory так там все еще интереснее вышло. было А\С стало В\С\В\С
причем каждое последующее копирование увеличивало эту цепочку... |
|
#10
|
||||
|
||||
|
Вроде дошло, я перемещаю папку немного по-другому, если по предложенной вами схеме, то примерно так
Код:
...
if MoveDir('c:\a\c\','c:\b\') then
... |