|
|
Регистрация | << Правила форума >> | 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, но не знаю как правильно это оформить. как попробую тогда отпишусь.
|
#4
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#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 ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |